.net 部分和显示

.net 部分和显示,.net,asp.net-mvc,templates,.net,Asp.net Mvc,Templates,第一个我的型号: public class Order { public DateTime Date {get;set;} } @model Order @Html.Partial("Display", Model.Date) @Html.LabelFor(x => x): <strong>@Html.DisplayFor(x => x)</strong> 我的观点: public class Order { public DateTime Da

第一个我的型号:

public class Order
{
  public DateTime Date {get;set;}
}
@model Order
@Html.Partial("Display", Model.Date)
@Html.LabelFor(x => x): <strong>@Html.DisplayFor(x => x)</strong>
我的观点:

public class Order
{
  public DateTime Date {get;set;}
}
@model Order
@Html.Partial("Display", Model.Date)
@Html.LabelFor(x => x): <strong>@Html.DisplayFor(x => x)</strong>
显示部分:

public class Order
{
  public DateTime Date {get;set;}
}
@model Order
@Html.Partial("Display", Model.Date)
@Html.LabelFor(x => x): <strong>@Html.DisplayFor(x => x)</strong>
@Html.LabelFor(x=>x):@Html.DisplayFor(x=>x)

标签未渲染。DisplayFor将显示日期。如果我向Order.Date添加一个属性
[DisplayName(“Order Date”)]
,这可能也是相关的。我做错什么了?我只想将html约定应用于所有模型属性以进行显示。我是不是搞错了?

这是因为您的部分基本上是针对
DateTime
的强类型,而不是
Order
。这仍然适用于
DisplayFor
,因为
DateTime
只会在自身上调用
ToString()
。但是,它没有名称或固有标签,因此
LabelFor
对您没有任何帮助

您应该这样做,实际上是将
订单
实例作为
模型
传递到分部中。然后:

@Html.LabelFor(m => m.Date): <strong>@Html.DisplayFor(m => m.Date)</strong>
@Html.LabelFor(m=>m.Date):@Html.DisplayFor(m=>m.Date)

会帮你找到你想要的

我不想为我的每一个模型都创建Partials,只是为了简单地用html包装我的显示字段。显然,我的做法是错误的。我只想调用@Html.Something(x=>x.Date)或@Html.Something(Model.Date),并让它使用预定义的模板。我可以使用Shared/DisplayTemplates实现这一点,但我必须为每种属性类型创建一个模板。这些简单的东西应该就在你的视野中。如果您正在寻找一种标准化显示的方法,您可以研究使用显示模板,但使用
LabelFor
等东西也会遇到同样的问题,即,除非有更大的上下文,否则您不能这样做--信息不是来自特定属性,而是来自模型本身。此外,我的partial没有
@model
设置,因此我认为“日期时间的强类型”是不正确的。简单明了的一点是,
LabelFor
从模型的元数据获取标签。除非您与实际模型交互,
LabelFor
将不起作用。