发布后重新加载当前视图

时间:2013-07-22 11:53:47

标签: c# asp.net-mvc-3

我有以下方法,点击“保存”即可调用。

 [HttpPost]
 public virtual JsonResult Save(MyViewModel myViewModel)
    {
      if (ModelState.IsValid)
       {
        MyProcessManager.Save(myViewModel.prop1,myViewModel.prop2, myViewModel.prop3);
       }else
       {
        HttpContext.Response.StatusCode = 500;
        HttpContext.Response.Clear();
       }
        return Json(ModelState.SerializeErrors());
    }

使用 - Ajax.BeginForm("MyActionName", "MyViewName", HttpVerbs.Put, null).完成保存视图是强类型的。成功保存后,我想再次绑定viewmodel,以便更新一些隐藏的字段值。 以下是加载视图的默认方法。

 public virtual ActionResult GetMyConfiguration(int myId)
 {
   var myViewModel = getMyViewModel(myId)
   return View("MyViewName", myViewModel);
 }

我怎样才能做到这一点?请建议。

1 个答案:

答案 0 :(得分:0)

我建议您可以将OnComlete ajax javascript处理程序方法添加到Ajax.BeginForm()帮助程序中,在成功MyProcessManager.Save()后返回序列化的jsom模型,并在OnComplete javascript方法解析中返回( $.parseJSON)模型,由控制器返回,并更新隐藏字段的值。如下所示:

查看:

Ajax.BeginForm("MyActionName", "MyViewName", null,new AjaxOptions
                           {
                               HttpMethod = "Post",
                               InsertionMode = InsertionMode.InsertAfter,
                               OnComplete = "complete",
                               UpdateTargetId = "update-target"
                           } ){}

<script type="text/javascript">
function complete(data)
{
    // parse model
    var result = $.parseJSON(data.responseText);

    // update hidden value
    $('#myhidden').val(result.prop1)
}
</script>

<强>控制器:

[HttpPost]   
public virtual JsonResult Save(MyViewModel myViewModel)
{
    if (ModelState.IsValid)
    {
         MyProcessManager.Save(myViewModel.prop1,myViewModel.prop2, myViewModel.prop3);
         return Json(myViewModel);
    }else
    {
         HttpContext.Response.StatusCode = 500;
         HttpContext.Response.Clear();
    }
    return Json(ModelState.SerializeErrors());
 }