Я пишу приложение MVC2, используя DataAnnotations. У меня есть следующая модель:
public class FooModel
{
[ScaffoldColumn("false")]
public long FooId { get; set; }
[UIHint("BarTemplate")]
public DateTime? Bar { get; set;}
}
Я хочу создать собственный шаблон отображения для бара. Я создал следующий шаблон:
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
<div class="display-label">
<span><%: Html.LabelForModel() %></span>
</div>
<div class="display-field">
<span><%: Html.DisplayForModel()%></span>
<%: Html.ActionLink("Some link", "Action", new { id = ??FooId?? }) %>
</div>
Теперь моя проблема в том, что внутри шаблона для Bar я хочу получить доступ к другому свойству из моей модели . Я не хочу создавать отдельный шаблон для FooModel, потому что тогда мне придется жестко кодировать все другие свойства FooModel.
После краткого исследования с помощью отладчика я вижу, что:
this.ViewData.ModelMetadata.ContainerType
is FooModel
(как и ожидалось) this.ViewData.TemplateInfo
имеет
закрытая собственность VisitedObjects
(типа
System.Collections.Generic.HashSet <объект>
)
который содержит два элемента:
FooModel
и DateTime?
. Как я могу получить доступ к моей FooModel? Я не хочу ковыряться в использовании Reflection.
Обновление:
Я принял ответ mootinator, поскольку он мне кажется лучшим решением, обеспечивающим безопасность типов. Я также поддержал ответ Tx3, поскольку ответ mootinator основывается на нем. Тем не менее, я думаю, что должна быть лучшая поддержка MVC в таких сценариях, которые, как мне кажется, довольно распространены в реальном мире, но отсутствуют в примерах приложений.