My Post call не возвращает правильный тип модели. Всегда используйте BaseObject вместо правильного производного объекта, который я прошел в от ПолучитьEditorFor Inheritance Model MVC
RestaurantViewModel.cs
public class RestaurantViewModel{
public Food BaseFoodObject{get;set;}
}
Food.cs
public class Food{
public string Price{get;set;)
}
Bread.cs - Наследование Food
public class Bread:Food{
public int Unit{get;set;}
}
Milk.cs - Наследование Food
public class Milk:Food{
public string Brand{get;set}
}
Редактор для шаблона для хлеба. Дисплей устройства и позволяет пользователю редактировать
Index.html
@Model RestaurantViewModel
@using(Html.BeginForm("SaveFood", "Food"))
{
@Html.EditorFor(m=>m.BaseFoodObject)
<input type="submit" value="Process"/>
}
Bread.cshtml
@Model Bread
<div>
@Html.TextboxFor(bread=>bread.Unit)
</div>
FoodController.cs
public ActionResult Index(){
Bread bread = new Bread(){
Price = "$10",
Unit = 1
}
RestaurantViewModel viewModel = new RestaurantViewModel(){
BaseFoodObject = bread
}
return View(viewModel);
}
public ActionResult Post(RestaurantViewModel viewModelPost)
{
// When I inspect the viewModelPost, there is no attribute for unit
}
Конечный результат: 1. Дисплей выглядит правильно. EditorFor достаточно умен, чтобы выбрать правильный шаблон редактора и правильно отобразить значение 2. Сохранить не Работа. Единица атрибут Хлеб Объект не передается с RestaurantViewModel. Причиной этого является RestaurantViewModel используется объект Food вместо хлеба
Я надеюсь, что далеко, чтобы изменить EditorFor и сказать ему, чтобы использовать модель в View или тип объекта, Я прошел, когда я его отобразил.
Благодаря
Update 1: Я решил эту проблему с помощью пользовательского связующего и используя фабрику для того чтобы решить, какой объект я действительно хочу. Это помогает построить правильную модель, которую я хочу
Спасибо. Я решил это с помощью специального связующего и фабрики. Ваше предложение замечательно. – namhoaingo