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

OnComleteヘルパーにajax JavaScript ハンドラー メソッドを追加し、Ajax.BeginForm()成功後にシリアル化された jsom モデルを返し、コントローラーから返されたJavaScript メソッド parse( ) モデルで、非表示フィールドの値を更新することをお勧めします。以下のようなもの:MyProcessManager.Save()OnComplete$.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 に答える