我正在使用 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 的内部模板我想从我的 model 访问另一个属性。我不想为 FooModel 创建单独的模板,因为我将不得不对所有其他 FooModel 属性进行硬编码。
在使用调试器进行简短调查后,我可以看到:
this.ViewData.ModelMetadata.ContainerType
是FooModel
(如预期的那样)this.ViewData.TemplateInfo
有一个非公共属性VisitedObjects
(类型为System.Collections.Generic.HashSet<object>
),其中包含两个元素:FooModel
和DateTime?
。
如何访问我的 FooModel?我不想使用反射来破解我的方式。
更新:
我已经接受了 mootinator 的回答,因为它在我看来是允许类型安全的最佳解决方案。我也赞成 Tx3 的答案,因为 mootinator 的答案建立在它之上。尽管如此,我认为在这些场景中应该有更好的 MVC 支持,我认为这在现实世界中很常见,但在示例应用程序中却没有。