注入一些东西到ASP MVC结果

Inject something to ASP MVC Result

本文关键字:ASP MVC 结果 注入      更新时间:2023-09-26

在我的项目中,我需要添加功能,显示信息框在页面的右上角,当客户端保存的东西。在我的解决方案中,当保存操作重定向到另一个页面时,一切工作正常。

客户端运行保存操作:

[SaveAction] //my own action filter to show info box
public ActionResult Details(int id, FormCollection form)
{
    var pojazd = PojazdRepo.GetById(id);;
    if (UpdateAndSave(pojazd, form))
    {
        return RedirectToAction("Index");
    }
    else
    {
        return View(GetDetailsViewModel(id, true));
    }
}

现在我的动作过滤器测试ModelState.IsValid为真,然后添加一些东西到TempData:

public class SaveActionAttribute : ActionFilterAttribute
{
    private bool test;
    private bool isAjax;
    public override void OnActionExecuted(ActionExecutedContext ctx)
    {
        test = ctx.Controller.ViewData.ModelState.IsValid;
        isAjax = ctx.HttpContext.Request.IsAjaxRequest();
        base.OnActionExecuted(ctx);
    }
    public override void OnResultExecuting(ResultExecutingContext ctx)
    {
        if (test)
        {
            if (isAjax) ctx.Controller.TempData["ActionPopUp"] = "";
            else ctx.Controller.TempData["ActionPopUp"] = "save";
        }   
        base.OnResultExecuting(ctx);
    }
}

和我的网站。主运行脚本如果TempData["ActionPopUp"] = "save":

<script type="text/javascript">
    $(document).ready(function () {
        var test = '<%: TempData["ActionPopUp"] %>';
        if (test != '') SaveSuccessPopUp(test);
    });
</script>

如前所述,此解决方案工作良好,当控制器重定向和站点。主再次加载,我的问题是,如何注入SaveSuccessPopUp()函数的动作结果,当动作被AJAX调用并返回一些东西,什么不重载页面,不运行站点。主控$(document).ready代码块

问得好。

您可能需要使用局部视图。我的意思是,如果您的请求是ajax请求,再次追加TempData, TempData将在部分视图中输出。

如何将部分视图输出作为html块发送?

我有一篇关于如何将部分视图作为字符串发送的博客文章。主题不同,但你会明白的:

http://www.tugberkugurlu.com/archive/working-with-jquery-ajax-api-on-asp-net-mvc-3-0-power-of-json-jquery-and-asp-net-mvc-partial-views

下面是一个例子:

    [HttpPost]
    public ActionResult toogleIsDone(int itemId) {
        //Getting the item according to itemId param
        var model = _entities.ToDoTBs.FirstOrDefault(x => x.ToDoItemID == itemId);
        //toggling the IsDone property
        model.IsDone = !model.IsDone;
        //Making the change on the db and saving
        ObjectStateEntry osmEntry = _entities.ObjectStateManager.GetObjectStateEntry(model);
        osmEntry.ChangeState(EntityState.Modified);
        _entities.SaveChanges();
        var updatedModel = _entities.ToDoTBs;
        //returning the new template as json result
        return Json(new { data = this.RenderPartialViewToString("_ToDoDBListPartial", updatedModel) });
    }

RenderPartialViewToString是一个控制器扩展。您可以从下面的链接找到完整的代码:

https://bitbucket.org/tugberk/tugberkug.mvc/src/6cc3d3d64721/TugberkUg.MVC/Helpers/ControllerExtensions.cs

在您将html返回到客户端代码之后,将其附加到DOM并对其进行处理。动画,显示/隐藏,做任何你想做的