【问题标题】:use other instead of @Html.DisplayFor in asp.net mvc 3 razor view在 asp.net mvc 3 razor 视图中使用 other 而不是 @Html.DisplayFor
【发布时间】:2012-06-23 05:40:23
【问题描述】:

我是asp.net mvc3 的新手。由于 asp.net mvc3 中使用的约定,修改单个代码确实令人困惑和困难。我试图以 1999 年 9 月 5 日 的格式仅显示 BirthDate 的日期,而不是显示日期和时间。在 Edit.cshtml 中很好,日期选择器用于选择日期,值保存在只有日期。但是,我有 Date 而不是 DateTime 数据类型的 BirthDate 列,并且在 Details.cshtml 中使用 @Html.DisplayFor(model => model.BirthDate); 时同时显示日期和时间。在谷歌搜索时,我发现并实现了以下代码,用于以期望格式显示日期:

@Model.BirthDate.ToString("dd MMM YYYY");

@Html.DisplayFor(model => model.BirthDate.ToString("dd MMM YYYY"));

它给出错误没有重载方法需要 1 个参数。此外,我可以使用:

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
pubilc DateTime BirthDate { get; set }

从那时起,我就对实体框架使用了模型优先方法。我应该在哪里实现上面的 DisplayFormat 属性或者在我的场景中以正确方式在 Details.csthml 中显示日期的剃刀语法

【问题讨论】:

    标签: asp.net-mvc-3 entity-framework-4 razor


    【解决方案1】:

    好的,我知道我正在回复 8 个月前发布的问题,但我唯一的目的是,这可能对其他人将来引用此问题有用。
    我也不是 MVC 的代言人,我也遇到了类似的问题,我只需要显示日期而不是时间,并且以下对我有用。

    而不是@Html.DisplayFor()。使用<span>
    因此,对于所提到的情况,它将是这样的:

    <span>@String.Format("{0:D}", model.BirthDate)</span>
    
    Output: Sunday, September 05, 1999 
    

    不,需要添加额外的类/文件进行格式化。

    【讨论】:

      【解决方案2】:

      根据我的cos,第三种方法是最好的方法

      1. 您的演示模型正在处理 UI 的所有方面,并且您的视图没有不必要和冗余的格式化代码,尤其是在您重用该属性时。
      2. 启用单元测试
      3. 如果您重用模型,则在不同页面之间保持一致。

      您还可以编写一个帮助方法来格式化日期并在所有演示/视图模型中一致地使用它。

      public string FormattedDate(this DateTime dateTime)
      {
        return dateTime.ToString("dd MMM YYYY");
      }
      

      【讨论】:

      • 感谢您的回复。我对 mvc3 完全陌生,请您告诉我如何在我的场景中实现帮助程序的步骤
      • 只需创建一个名为 ViewFormatter/FormatHelper 的类,放入您需要的方法,然后在您的视图或模型中引用此命名空间
      【解决方案3】:

      我喜欢使用一种 decorator 模式来处理这种事情。假设您的模型类名为MyModel。然后像这样定义一个包装类:

      public class MyModelDecorator 
      {
          public MyModel BaseItem { get; set; }
      
          [DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
          public DateTime BirthDate { get; set; }
      
          public MyModelDecorator(MyModel baseItem)
          {
              BaseItem = baseItem;
          }
      }
      

      然后在您的视图中,您可以引用基本模型属性或装饰属性。

      @Html.DisplayFor(m => m.BirthDate)
      @Html.DisplayFor(m => m.BaseItem.SomeOtherProperty)
      

      如果有比这个更好的解决方案,那我真的很想听听......

      【讨论】:

      • 好的,不知道怎么用。我在其中创建了文件夹 Decorator 和 MyModelDecorator.cs。现在,鉴于我的引用为@model IVRControlPanel.Decorator.MyModelDecoratorMyModel 的属性未绑定,但检测到 BirthDate 属性。或者,我做错了
      • @CodeManiac MyModel 不是此示例中的属性名称,而是 BaseItem。不过可以随意命名。
      • 我不是说它的属性名称。在这里,在我的场景中,我有用户类(如 MyModel)并具有用户名、电子邮件、密码等属性。这些属性未绑定到我的视图
      • @CodeManiac 对...你必须使用 MyModel.BaseItem.username 等。如果你想以 MyModel.username 的身份访问它们,那么你必须将它们添加到装饰器类中。
      【解决方案4】:

      对于任何 ASPX 用户 sumbad 的回答都有帮助,但这就是你的做法:

      <%=Html.Enconde(String.Format("{0:D}", item.yourDate))%>
      

      希望这对某人有所帮助。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-09-02
        • 1970-01-01
        • 1970-01-01
        • 2012-08-04
        • 1970-01-01
        • 2011-10-09
        • 2013-10-15
        相关资源
        最近更新 更多