DataAnnotations を使用して MVC2 アプリを作成しています。私は次のモデルを持っています:
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>
さて、私の問題は、Bar のテンプレート内で、モデルから別のプロパティにアクセスしたいということです。他のすべての FooModel プロパティをハードコードする必要があるため、FooModel 用に個別のテンプレートを作成したくありません。
デバッガーで簡単に調査した後、次のことがわかります。
this.ViewData.ModelMetadata.ContainerType
ですFooModel
(予想通り)this.ViewData.TemplateInfo
には、 と の2 つの要素を含むVisitedObjects
(タイプ の )非パブリック プロパティがあります。System.Collections.Generic.HashSet<object>
FooModel
DateTime?
FooModel にアクセスするにはどうすればよいですか? Reflection を使って自分のやり方をハックしたくありません。
アップデート:
タイプセーフを可能にする最良の解決策として私には見えるので、ムーティネーターの答えを受け入れました。Mootinatorの回答がそれに基づいているため、Tx3の回答にも賛成しました。それにもかかわらず、この種のシナリオでは、MVC からのより良いサポートが必要だと思います。これは、現実の世界では非常に一般的ですが、サンプル アプリには欠けていると思います。