Я пишу приложение MVC2 с использованием DataAnnotations.У меня есть следующая модель:
public class FooModel
{
[ScaffoldColumn("false")]
public long FooId { get; set; }
[UIHint("BarTemplate")]
public DateTime? Bar { get; set;}
}
Я хочу создать собственный шаблон отображения для Bar.Я создал следующий шаблон:
<%@ 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>
Теперь моя проблема в том, что внутри шаблона для бара, я хочу получить доступ к другому свойству из моей модели .Я не хочу создавать отдельный шаблон для FooModel, потому что мне придется жестко закодировать все остальные свойства FooModel.
После короткого исследования с помощью отладчика я вижу, что:
this.ViewData.ModelMetadata.ContainerType
равно FooModel
(как и ожидалось) this.ViewData.TemplateInfo
имеет закрытое свойство VisitedObjects
(типа System.Collections.Generic.HashSet<object>
), которое содержит два элемента: FooModel
и DateTime?
.
Как я могу получить доступ к моей FooModel?Я не хочу взламывать свой путь, используя Reflection.
Обновление:
Я принял ответ mootinator, поскольку он выглядит для меня как лучшее решение, которое позволяеттип-безопасности.Я также проголосовал за ответ Tx3, так как ответ mootinator основан на нем.Тем не менее, я думаю, что в таких сценариях должна быть лучшая форма поддержки MVC, которая, как мне кажется, довольно распространена в реальном мире, но отсутствует в примерах приложений.