MVC2 - Как получить родительскую модель (контейнер) внутри шаблона

Я пишу приложение 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.

После краткого исследования с помощью отладчика я вижу, что:

  1. this.ViewData.ModelMetadata.ContainerType is FooModel (как и ожидалось)
  2. this.ViewData.TemplateInfo имеет закрытая собственность VisitedObjects (типа System.Collections.Generic.HashSet <объект> ) который содержит два элемента: FooModel и DateTime? .

Как я могу получить доступ к моей FooModel? Я не хочу ковыряться в использовании Reflection.

Обновление:

Я принял ответ mootinator, поскольку он мне кажется лучшим решением, обеспечивающим безопасность типов. Я также поддержал ответ Tx3, поскольку ответ mootinator основывается на нем. Тем не менее, я думаю, что должна быть лучшая поддержка MVC в таких сценариях, которые, как мне кажется, довольно распространены в реальном мире, но отсутствуют в примерах приложений.

6
задан smartcaveman 15 June 2012 в 00:07
поделиться