Я пытаюсь использовать EditorTemplate для отображения дочерней коллекции в таблице в представлении родителей. Проблема, с которой я столкнулся, заключается в том, что это работает, только если шаблон назван точно таким же, как класс childs. Когда я пытаюсь использовать шаблон с немного другим именем и передаю это имя в качестве аргумента templateName для редактора, я получаю ошибку времени выполнения. Я надеялся, что могу использовать разные дочерние EditorTemplates для разных целей с той же дочерней коллекцией. Вот сокращенный пример:
Модель:
public class Customer
{
int id { get; set; }
public string name { get; set; }
public List<Order> Orders { get; set; }
}
public class Order
{
public int id { get; set; }
public DateTime orderdate { get; set; }
public decimal amount { get; set; }
public Customer customer { get; set; }
}
Клиентский метод Index():
public ActionResult Index()
{
Customer customer = new Customer() {id = 1, name = "Acme Corp.", Orders = new List<Order>()};
customer.Orders.Add(new Order() {id = 1, orderdate = DateTime.Now, amount = 100M});
customer.Orders.Add(new Order() { id = 2, orderdate = DateTime.Now, amount = 200M });
return View(customer);
}
Просмотр клиента Index.cshtml:
@model TemplateTest.Customer
@{
Layout = null;
}
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width" />
<title>Customer</title>
</head>
<body>
<div>
@Html.EditorFor(Model=>Model.name)
<table>
<thead>
<tr>
<th>Order ID</th>
<th>Order Date</th>
<th>Amount</th>
</tr>
</thead>
@Html.EditorFor(Model=>Model.Orders)
</table>
</div>
</body>
</html>
шаблон Order.cshmtl в Views/Shared/EditorTemplates (добавлен "цвет" для проверки того, что я использую этот шаблон):
@model TemplateTest.Order
<tr>
<td>@Html.DisplayFor(Model=>Model.id)</td>
<td style="color:blue">@Html.EditorFor(Model=>Model.orderdate)</td>
<td>@Html.EditorFor(Model=>Model.amount)</td>
</tr>
Это прекрасно работает. Но если я переименую EditorTemplate в "OrderList.cshtml" и изменим дочернюю строку EditorFor на
@Html.EditorFor(Model=>Model.Orders, "OrderList")
когда я запускаю его снова, я получаю это исключение:
"Элемент модели, переданный в словарь, имеет тип" System.Collections.Generic.List`1 [TemplateTest.Order] ", но для этого словаря требуется элемент модели типа" TemplateTest.Order "."
Любая идея, почему EditorFor не использует шаблон "OrderList", указанный в аргументе "templateName"? В противном случае, что это за аргумент?