В MVC представления и контроллеры тесно связаны таким образом, что при правильном проектировании приложения MVC представления напрямую не взаимодействуют с классами модели или с другими представлениями: они имеют дело только с контроллерами.
Это означает, что ваш View1 должен будет отправить свои данные обратно контроллеру, чья работа состоит в том, чтобы взять эти данные, выполнить логику проверки, изменить модель (если необходимо), а затем вызвать View2 с обработанными данными, которые он получил из View1. Как это происходит?
Во-первых, вам понадобится пара ViewModel, которая упаковывает все необходимые вам данные
public class MainViewModel
{
public string MainData;
}
public class DetailsViewModel
{
public string DetailsData;
}
Тогда у нас есть контроллер. Допустим, у вас есть контроллер с простым View1
методом:
public View1()
{
return View()
}
Это вызовет ваш View1
, который показывает пустые поля для вашей модели
@MyApp.Models.ViewModel
@using(Html.BeginForm(“View1”))
{
@Html.EditorFor(m => m.MainData)
// submit
}
Это приведет к вызову POST
метода View1
в вашем контроллере. Из-за атрибутов фильтра вы можете указать второй метод View1 в том же контроллере, чье задание будет обрабатывать данные, отправленные из View1, и перенаправлять пользователя в View2
.
[HttpPost]
public RedirectToRouteResult View1(ViewModel model)
{
repository.Set(model.MainData);
return RedirectToAction(“View2”);
}
Теперь просто повторите в вашем View2 вызов метода HttpPost, где вы обновляете хранилище, используя DetailsData из формы View2