代码之家  ›  专栏  ›  技术社区  ›  Paul Hadfield

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

  •  3
  • Paul Hadfield  · 技术社区  · 14 年前

    仅供参考:“Date”类构建Date time,但隐藏time功能。 我已经为这个日期类型创建了一个显示模板,它可以很好地格式化日期,但是在一次实例(如下所示)中,如果对象为空(在本例中为End Date),我希望输出文本“No End Date Specified”。

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

    我无法更改显示模板,因为这对于日期对象的所有实例都很常见,我也不想更改模型本身。基本上我想要的是:

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

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

    2 回复  |  直到 14 年前
        1
  •  1
  •   Jab    14 年前

    尝试使用 UIHint .

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

    然后创建 CustomDateNull.ascx 显示模板。帮助程序将在返回到类型本身之前查找UIHint。

        2
  •  0
  •   John Farrell    14 年前

    您知道通过使用文件夹结构中的控制器名称可以使用更具体的自定义模板吗?

    您可能已经创建了/Shared/DisplayTemplates/CustomDate.ascx

    现在不需要为调用执行任何类型的动态显示。您将遇到的问题是,DisplayFor真正想知道模型表达式来自哪个对象类型的属性,以便它可以查找元数据。有了lambda,我很确定您正在破坏查找成员访问的功能,然后从中查找元数据。