【问题标题】:How do I use DisplayFor() for objects that are not directly part of my model in asp .net mvc 2?如何在 asp .net mvc 2 中将 DisplayFor() 用于不直接属于我的模型的对象?
【发布时间】:2010-08-11 16:34:58
【问题描述】:

我确定我在这里遗漏了一些非常简单的东西。我创建了一个自定义 DateTime 显示模板。使用时效果很好:

<%= Html.DisplayFor(x=>x.DateTimeProperty) %>

但是,我有一种情况,我在部分控件内的 for 循环中迭代模型中的对象。我想要一个 DateTime 属性来使用显示模板,但我不知道如何指示它这样做。该属性应该是 DateTime 。看起来像:

 <% foreach (var item in Model) { %>
       <%= Html.Encode(item.DateTimeProperty)  %>
 <% } %>

由于这种结构,我无法调用 Html.DisplayFor(...),但我希望所有 DateTime 属性都使用我的 DateTime 显示模板。

我尝试通过 DataAnotations 添加 UIHint,但这似乎没有奏效。

我该怎么做?

【问题讨论】:

    标签: c# templates asp.net-mvc-2


    【解决方案1】:

    并不是说这个问题有很多观点,但我找到了答案并认为我会发布以防有人好奇。

    解决方案相当简单:

    <%= Html.DisplayFor(x=>item.ReviewDate, "DateTime") %>
    

    我的自定义显示模板(命名为:DateTime)定义为:

    <%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<DateTime?>" %>
    <% 
        string value = (Model.HasValue ? Model.Value.ToShortDateString() : ""); 
    %>
    <%= Html.Encode(value) %>
    

    我想我没有意识到,当您声明 lambda 时,您根本不必使用 '=>' 左侧的变量。我一直认为这是强制性的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2023-03-18
      • 1970-01-01
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-12-02
      相关资源
      最近更新 更多