是否可以在Html.DisplayFor调用中放置条件语句?

时间:2010-10-27 12:08:45

标签: asp.net-mvc asp.net-mvc-2 html-helper

基本上我在MVC输出模型中有一个自定义构建的“Date”类“EndDate”。 FYI:“Date”类构建了DateTime但隐藏了时间功能。我为这个Date类型创建了一个显示模板,它很好地格式化了日期但是在一次实例中(如下所示)为null(在本例中为EndDate)我希望输出文本“No End Date Specified”输出。

<%:Html.DisplayFor(m => m.EndDate)%>

我无法将显示模板更改为Date对象的所有实例的常用模板,我也不想真正更改模型本身。基本上我想要这样的东西:

<%:Html.DisplayFor((m => (m.EndDate == null) ? "No End Date Specified" : m.EndDate)%>

上述可能以任何形式出现吗?如果没有,那么实现此功能的更好方法是什么。 我想即使有办法做到这一点,如果这不是一个好主意,请让我知道为什么不这样做以及更好的方式

2 个答案:

答案 0 :(得分:1)

尝试使用UIHint

[UIHint("CustomDateNull")]
public CustomDate EndDate { get;set; }

然后创建一个CustomDateNull.ascx显示模板。在返回Type本身之前,帮助程序将查找UIHint。

如果您根本无法编辑模型,则必须使用RenderPartial并将日期作为部分视图的模型传递。

答案 1 :(得分:0)

您是否知道可以使用文件夹结构中的Controller名称来使用更具体的自定义模板?

您可能已创建:/ Shared / DisplayTemplates / CustomDate.ascx 但对于特定的控制器,您可以使用:/ MySpecific/DisplayTemplates/CustomDate.ascx

现在您不需要进行任何类型的动态DisplayFor调用。您将遇到的问题是DisplayFor确实想知道您的模型表达式来自哪个对象类型的属性,因此它可以查找元数据。使用lambda,我很确定你打破了查找成员访问权限的功能,然后从中查找元数据。

相关问题