我正在使用DataAnnotations编写MVC2应用程序。我有以下型号: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>
现在,我的问题是,内模板吧我想从我的模型访问其他财产。我不想为FooModel创建单独的模板,因为我不得不硬编码所有其他FooModel属性。
与调试简短的调查后,我可以看到:
this.ViewData.ModelMetadata.ContainerType
是FooModel
(预期)this.ViewData.TemplateInfo
有 非公共财产 (类型System.Collections.Generic.HashSet<object>
)VisitedObjects
其中包含两个元素:FooModel
和DateTime?
。
我该如何访问我的FooModel?我不想破解我使用Reflection的方式。
更新:
我已经接受mootinator的答案,因为它看起来对我来说是允许类型安全的最佳解决方案。我也提出了Tx3的答案,因为mootinator的答案是建立在答案上的。尽管如此,我认为在那些场景中应该有更好的MVC支持形式,我认为这在现实世界中很常见,但在示例应用程序中却很少见。
@Jakub:Bar.cshtml的模型是'DateTime?'的类型,没有'm.Bar'我认为。 – xport 2011-02-15 10:54:43
@Recycle Bin - 干杯,编辑了这个问题。 – 2011-02-15 11:20:44
@Jakub:我不明白为什么你需要从'DateTime?'内访问'FooModel'。它没有任何意义。 :-) – xport 2011-02-15 11:25:32