Предположим, что у меня есть 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) %>
автоматически добавит правильный "Ребенок". префикс к сгенерированным строкам имени/идентификатора?
Я могу принять любое решение, в том числе 3-х сторонние механизмы просмотра и библиотеки - на самом деле я использую Spark View Engine (я "решаю" проблему с помощью своих макросов) и MvcContrib, но не нашел там решения. XForms, InputBuilder, MVC v2 - любой инструмент/проницательность, обеспечивающие эту функциональность, будет отличным.
В настоящее время я думаю о кодировании этого сам, но это кажется пустой тратой времени, я не могу поверить, что этот тривиальный материал уже не реализован.
Много ручных решений может существовать, и все они приветствуются. Например, я могу заставить мои частичные элементы основываться на IPartialViewModel <T> {public string Префикс; Модель Т; }. Но я предпочел бы использовать существующее/одобренное решение.
ОБНОВЛЕНИЕ: есть аналогичный вопрос без ответа здесь.