2013-07-22 92 views
2

我有下面的方法,它被點擊保存時調用。Post後重新載入當前視圖

[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); 
} 

我該如何做到這一點?請建議。

回答

0

我建議你可以添加OnComlete AJAX腳本處理方法您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()); 
} 
+0

加入參考jquery.unobtrusive-ajax.js後與上述代碼工作。 – San

相關問題