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