У меня есть приложение ASP.NET MVC4, в котором в определенный момент есть страница ( Индекс ), где пользователь может выбрать элемент из DropDownList.После отправки этого контроллер вернет другое имя PartialView в другое представление ( Создать ), основываясь на выбранном элементе из списка.Каждый частичный элемент имеет собственную ViewModel, и когда PartialView отправляется с контроллера на Create -View, он отображается правильно.Чтобы достичь этого, я создал общую ViewModel и несколько других ViewModel, которые являются производными от этой общей ViewModel.Представление Create имеет общий ViewModel в качестве модели, а Partials, который будет отображаться в представлении Create , имеет соответствующие производные типы в качестве Model.
Но вот проблема, когда я отправляю форму в PartialView, я должен получить правильную ViewModel обратно в контроллер.Принятие общей ViewModel в качестве параметра не будет работать, так как я не смогу затем привести его вниз к правой ViewModel.Вот пример кода, который у меня есть:
ViewModels:
public class PropertyViewModel
{
public string ViewName { get; set; }
public String Name { get; set; }
public String Description { get; set; }
}
public class IntegerViewModel : PropertyViewModel
{
public int MinValue { get; set; }
public int MaxValue { get; set; }
}
public class TextViewModel : PropertyViewModel
{
public int MaxLength { get; set; }
}
Контроллер:
public ActionResult Create(String partialName)
{
var model = GetViewModelFromName(partialName);
return View(model);
}
[HttpPost]
public ActionResult Create(???)
{
//What to do here and what kind of parameter should I expect?
}
Есть ли«чистый» способ сделать это?И кто-нибудь знает, как этого добиться?
Обновление:
У меня есть решение, которое, кажется, работает.В PartialView я устанавливаю actionName и controllerName формы, например:
@using (Html.BeginForm("CreateIntegerProperty", "Property")) {
//Formstuff...
}
@using (Html.BeginForm("CreateTextProperty", "Property")) {
//Formstuff...
}
И в моем контроллере у меня есть все различные действия (по одному для каждого из PartialViews).Это похоже на работу.Теперь это чистый способ сделать это?Если кто-нибудь придумает лучшую идею, пожалуйста, дайте мне знать!