Что должен получать контроллер, когда я отправляю представление, которое содержит несколько частичных представлений с разными моделями.Что контроллер должен получать, когда я отправляю представление, которое содержит несколько частичных представлений с разными моделями?
У меня есть представление, которое отображает несколько/динамических частичных представлений (эти представления выбираются в зависимости от пакета, который ранее был выбран пользователем), все эти частичные представления имеют разные модели, и мне нужно отправить их в один большой «родительский» формы. Моя главная забота - что должен получить контроллер? и как обрабатывать всю информацию внутри него, поскольку у меня есть несколько и переменных моделей (в зависимости от того, что пользователь выбирает), которые отправляются из формы.
Это мое родительское представление, которое отображает все частичные виды, в зависимости от того, какой пакет выбрал пользователь (т. Е. Родительский вид может отображать от 1 до 7 форм, все они имеют разные модели). Строка IEnumerable содержит список строк, которые я буду использовать, чтобы выплевывать словарь с представлениями и моделями, чтобы сделать их позже в этом представлении.
@using UI.Shared.Utils
@model IEnumerable<string>
@{
var forms = CustomFormUtil.GetCustomMetaPartial(Model);
}
@using (Html.BeginForm(MVC.Service.NewOrderRequest.Index(**I am confused what to pass here**), FormMethod.Post))
{
foreach (var form in forms)
{
{ Html.RenderPartial(form.View, form.Model); }
}
<p style="clear: both">
<input id="submitNOR" type="submit" value="Submit" style="float: right" />
</p>
}
Так скажем, пользователь заполняет 4 частичный вид, что означает, что я должен послать 4-х различных моделей к контроллеру, так что я могу использовать данные, заполненные пользователем.
Это мой контроллер:
[HttpPost]
[SaveModelState]
public virtual RedirectToRouteResult Index(**What should I receive**)
{
if (!ModelState.IsValid)
{
ModelState.AddModelError("error", "Please fill out the required fields");
return RedirectToAction(MVC.Service.NewOrderRequestForms.Index());
}
...
}
Моя главная забота, что должно получить контроллер? Я попробовал следующее:
[HttpPost]
[SaveModelState]
public virtual RedirectToRouteResult Index(IEnumerable<ICustomModel> models)
, но после некоторых исследований это не возможно, также я попытался пройти все возможные модели к контроллеру
[HttpPost]
[SaveModelState]
public virtual RedirectToRouteResult Index(Model1 model1, ..., ModelN modeln)
Это также не работает, и моя последняя попытка была создать эталонную модель, которая содержит все возможные модели и передать его на контроллер, это мой мастер модель
namespace UI.Next.Areas.Service.Models
{
public class TdlMasterModel : ICustomMetaModel
{
public TdlMasterModel()
{
}
public TdlMasterModel(Guid? accountId)
{
AccountId = accountId;
}
public Guid? AccountId { get; set; }
public Model1 model1{ get; set; }
...
public ModelN modeln{ get; set; }
}
}
контроллер:
[HttpPost]
[SaveModelState]
public virtual RedirectToRouteResult Index(MasterModel masterModel)
До сих пор ни одно из предлагаемых решений не работало. Есть ли прямое решение для этого или мне придется создать ModelBinder
, чтобы справиться с этим.
Q1 - Ничто не должно быть в 'BeginForm' если GET и Методы POST одинаковы (т. Е. 'Index()' - это может быть просто '@using (Html.BeginForm()) {' –
Q2.- Модель «master» - правильный подход. Вам нужно инициализировать новую экземпляр модели представления в методе GET и передать его в представление, которое будет иметь @model TdlMasterModel –
Спасибо за ответ, я смущен о Q2, не могли бы вы привести пример, пожалуйста ?. Также, если отдельные модели свойство «имя» или что-то подобное, чтобы дифференцировать их в контроллере? Я спрашиваю об этом, потому что некоторые из поля свойств в моделях имеют одно и то же имя, и я беспокоюсь о том, как их отличать при удалении данных из MasterModel. –