在asp.net mvc 3 razor视图中使用other而不是@ Html.DisplayFor

时间:2012-06-23 05:40:24

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

我是asp.net mvc3的新手。由于asp.net mvc3中使用的约定,修改单个代码实在令人困惑和困难。我试图仅以 1999年9月5日的格式显示出生日期的日期,而不显示日期和时间。在Edit.cshtml中没用,datepicker用于选择日期和值保存在数据库中只有约会。但是,我的数据类型日期的BirthDate列不是DateTime,而在 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 }

因为,我已经使用模型第一种方法来实现Entity Framework。我应该在哪里实现上面的DisplayFormat属性,或者在我的场景中的Details.csthml中以正确的方式显示日期的razor语法

4 个答案:

答案 0 :(得分:1)

好的,我知道我正在回复8个月之前发布的问题,但我的唯一目的是,这可能会对将来引用此问题的其他人有所帮助。
我也对MVC没有发言权,我也遇到了类似的问题,我只需要显示日期,而不是时间和后续工作。

而不是@Html.DisplayFor()。使用<span>
因此,对于上述案例,它将是这样的:

<span>@String.Format("{0:D}", model.BirthDate)</span>

Output: Sunday, September 05, 1999 

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

答案 1 :(得分:0)

第三种方法是根据我的最佳方式cos

  1. 您的演示模型正在处理UI的所有方面,并且您的视图没有不必要的冗余格式代码,特别是如果您重复使用该属性。
  2. 启用单元测试
  3. 如果您重复使用该模型,则在不同页面中保持一致。
  4. 您还可以编写一个帮助方法来格式化日期,并在所有演示/视图模型中一致地使用它。

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

答案 2 :(得分:0)

我喜欢使用一种装饰器模式来处理这种事情。假设您的模型类名为 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)

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

答案 3 :(得分:0)

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

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

希望这有助于某人。