2

我有以下方法,单击保存时会调用该方法。

 [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).视图是强类型的。现在成功保存后,我想再次绑定视图模型,以便更新一些隐藏字段值。下面是加载视图的默认方法。

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

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

4

1 回答 1

0

我建议您可以将OnComleteajax javascript 处理程序方法添加到您的Ajax.BeginForm()帮助程序,成功后返回序列化的 jsom 模型MyProcessManager.Save(),并在您的OnCompletejavascript 方法解析($.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());
 }
于 2013-07-22T12:01:29.000 回答