Припустимо, мені подобається ViewModel
public class AnotherViewModel
{
public string Name { get; set; }
}
public class MyViewModel
{
public string Name { get; set; }
public AnotherViewModel Child { get; set; }
public AnotherViewModel Child2 { get; set; }
}
На погляд, я можу зробити часткове с
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
У частковій я зроблю
<%= Html.TextBox("Name", Model.Name) %>
or
<%= Html.TextBoxFor(x => x.Name) %>
Однак проблема полягає в тому, що обидва будуть виводити name = "Name", тоді як мені потрібно мати name = "Child.Name" для того, щоб палітурка моделі працювала належним чином. Або, name = "Child2.Name", коли я надаю другу властивість, використовуючи той самий частковий вигляд.
Як зробити так, щоб мій частковий вигляд автоматично розпізнав потрібний префікс? Я можу передавати це як параметр, але це занадто незручно. Це ще гірше, коли я хочу, наприклад, зробити це рекурсивно. Чи є спосіб вивести часткові представлення з префіксом, а ще краще, з автоматичним відновленням виклику лямбда-виразу, щоб
<% Html.RenderPartial("AnotherViewModelControl", Model.Child) %>
автоматично додасть правильне "Дитина". префікс до згенерованих рядків імені / id?
Я можу прийняти будь-яке рішення, включаючи двигуни та бібліотеки сторонніх представників - я фактично використовую Spark View Engine (я "вирішую" проблему за допомогою своїх макросів) та MvcContrib, але там не знайшов рішення. XForms, InputBuilder, MVC v2 - будь-який інструмент / уявлення, які забезпечують цю функціональність, буде чудовим.
В даний час я думаю про кодування цього самого, але це здається марною тратою часу, я не можу повірити, що цей тривіальний матеріал уже не реалізований.
Можливо, існує багато ручних рішень, і всі вони вітаються. Наприклад, я можу змусити мої партії базуватися на IPartialViewModel <T> {префікс public string; T Модель; }. Але я вважаю за краще щось існуюче / затверджене рішення.
UPDATE: є таке запитання без відповіді тут .
helper.ViewData.TemplateInfo.HtmlFieldPrefix
у формі{oldprefix}.{newprefix}