Мне нужно обновить несколько элементов DOM (в этом случае divs), когда я делаю определенный вызов в моем приложении MVC3. Все мои действия действуют в отдельных функциях со своими собственными моделями просмотров:
public ActionResult Action3(ViewModel3 model)
{
return PartialView("_DomElement3", model);
}
public ActionResult Action2(ViewModel2 model)
{
return PartialView("_DomElement2", model);
}
public ActionResult Action1(ViewModel1 model)
{
return PartialView("_DomElement1", model);
}
Здесь, как выглядят все три вида бритвы (просто с разными моделями):
@model ViewModel1
<div id='domElement1'>@Model.values1</div>
Я сделал это так, потому что их вызывали по требованию, и я думал, что больше ничего не вызовет их. Но я столкнулся со сценарием, когда мне придется обновлять все три элемента div после выполнения определенных критериев. Я сейчас делаю это так, и мне это не нравится:
var values_1 = {'values1':'one'};
$.ajax({
url: '@Url.Action("Action1")',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: values_1,
success: function (data) {
$('#domElement1').html(data);
var values_2 = {'values2':'two'};
$.ajax({
url: '@Url.Action("Action2")',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: values_2,
success: function (data) {
$('#domElement2').html(data);
var values_3 = {'values3':'three'};
$.ajax({
url: '@Url.Action("Action3")',
dataType: 'json',
type: 'POST',
contentType: 'application/json; charset=utf-8',
data: values_3,
success: function (data) {
$('#domElement3').html(data);
}
});
}
});
}
});
Как вы можете видеть, я звоню на сервер по одному. Кто-нибудь знает лучший способ обновить мои элементы только одним вызовом на сервер?
Мне нужно было бы создать пример приложения, чтобы проверить его, но одна возможность - иметь метод, который возвращает JSON. Этот ответ может вернуть массив частичных результатов:
[HttpPost]
public ActionResult SomeMethodName()
{
/* get your data */
var results = new List<ActionResult>();
foreach(var model in YourCollection)
{
results.Add(new PartialResult("viewname", mode));
}
return Json(results.ToArray());
}
Это в значительной степени псевдо-код, но он должен иметь смысл.