2013-07-22 4 views
2

У меня есть метод ниже, который вызывается при нажатии Save.Обновить текущий вид после сообщения

[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

Я предлагаю вам добавить OnComlete AJAX-код метода обработчика для вашего Ajax.BeginForm() помощника, вернуть сериализованную модель jsom после успешного MyProcessManager.Save(), и в вас 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

Смежные вопросы