我有以下方法,点击“保存”即可调用。
[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);
}
我怎样才能做到这一点?请建议。
答案 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());
}