У меня есть несколько флажков и кнопка (не в форме)
Когда кнопка нажата, у меня есть некоторый jQuery, и я создаю модель публикации, которая содержит значения отмеченных полей и проводку в контроллер.
Затем контроллер создает модели представления, и я хочу перенаправить пользователя в правильное представление, передав модель представления в представление.
JQuery:
$.ajax({
url: AppSettings.baseUrl + "BOM/getMultiBOM",
type: 'POST',
data: JSON.stringify(data)
});
* 1009 Контроллер *
[HttpPost]
public ActionResult getMultiBOM(multiBOMPostModel multiBomsPostModel)
{
BOM bom = null;
foreach (int value in multiBomsPostModel.bomsArray)
{
bom = db.BOMs.Find(value);
}
BOMViewModel viewModel = getViewModel(bom, null);
return RedirectToAction("OpenMultiBOM", new { viewModel = viewModel, bom = bom });
}
public ActionResult OpenMultiBOM(BOMViewModel viewModel, BOM bom)
{
viewModel.projectModel = new ProjectViewModel
{
project = bom.Project
};
return View(viewModel);
}
Это, вероятно, немного беспорядок.
Я думаю, что jQuery необходим для передачи значений флажков в контроллер.
Когда я использую RedirectToAction для метода, который затем возвращает представление, модель не передается, по-видимому, так как она отправляет модель в виде строки запроса.
Модель представления не проста и содержит списки, простые элементы и вложенные модели.
Может ли кто-нибудь помочь с наиболее эффективным способом перенаправления / возврата представления при передаче модели представления?
Ответ
Я сохранил ajax для отправки значений своих флажков на контроллер
$.ajax({
url: AppSettings.baseUrl + "BOM/getMultiBOM",
type: 'POST',
data: JSON.stringify(dataArr),
}).done(function (result) {
location.href = "/BOM/OpenMultiBOM";
});
В моем контроллере я присвоил опубликованные значения postModel, а затем сохранил их в TempData. Ключевым моментом здесь было вернуть значение Json, которое затем позволило бы выполнить перенаправление на стороне клиента.
public ActionResult getMultiBOM(multiBOMPostModel multiBOMPostModel)
{
TempData["BOMs"] = multiBOMPostModel;
return Json("success");
}
Затем у меня был другой метод HttpGet, который загружался бы после того, как страница перенаправлена результатом Ajax, и приводил TempData к объекту.
[HttpGet]
public ActionResult OpenMultiBOM(int? BomMarkupMessage = null)
{
var bomIds = TempData["BOMs"] as multiBOMPostModel;
}