Asp.net mvc 3 在asp.net mvc 3 razor视图中使用other而不是@Html.DisplayFor
我是asp.NETMVC3的新手。由于asp.net mvc3中使用的约定,修改单个代码确实令人困惑且困难。我试图以1999年9月5日的格式只显示生日的日期,而不是显示日期和时间。在Edit.cshtml中,可以使用datepicker选择日期,值保存在仅日期的数据库中。但是,在使用Asp.net mvc 3 在asp.net mvc 3 razor视图中使用other而不是@Html.DisplayFor,asp.net-mvc-3,entity-framework-4,razor,Asp.net Mvc 3,Entity Framework 4,Razor,我是asp.NETMVC3的新手。由于asp.net mvc3中使用的约定,修改单个代码确实令人困惑且困难。我试图以1999年9月5日的格式只显示生日的日期,而不是显示日期和时间。在Edit.cshtml中,可以使用datepicker选择日期,值保存在仅日期的数据库中。但是,在使用@Html.DisplayFor(model=>model.BirthDate)时,我有数据类型为Date的BirthDate列,而不是DateTime在详细信息中。cshtml显示日期和时间。在谷歌搜索时,我发现并
@Html.DisplayFor(model=>model.BirthDate)时,我有数据类型为Date的BirthDate列,而不是DateTime代码>在详细信息中。cshtml显示日期和时间。在谷歌搜索时,我发现并实现了以下代码,用于以desire格式显示日期:
@Model.BirthDate.ToString("dd MMM YYYY");
及
它给出了错误,没有重载方法接受1个参数。此外,我还可以使用:
[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]
pubilc DateTime BirthDate { get; set }
此后,我在实体框架中使用了模型优先的方法。我应该在哪里实现上面的DisplayFormat属性,或者使用什么语法以正确的方式详细显示日期。在我的场景中,第三种方法是我认为最好的方法
您的表示模型处理UI的所有方面,并且您的视图没有不必要和冗余的格式代码,尤其是在重用该属性的情况下
启用单元测试
如果重用模型,则在不同页面上保持一致
您还可以编写一个助手方法来格式化日期,并在所有演示/视图模型中一致地使用该方法
public string FormattedDate(this DateTime dateTime)
{
return dateTime.ToString("dd MMM YYYY");
}
我喜欢用一种装饰图案来处理这种事情。假设您的模型类称为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;
}
}
<span>@String.Format("{0:D}", model.BirthDate)</span>
Output: Sunday, September 05, 1999
然后,在视图中,可以参考基础模型特性或装饰特性
@Html.DisplayFor(m => m.BirthDate)
@Html.DisplayFor(m => m.BaseItem.SomeOtherProperty)
如果有比这个更好的解决方案,那么我真的很想听到它……好的,我知道我正在回答8个月前发布的一个问题,但我唯一的目的是,这可能对以后引用此问题的其他人有用。
我也是MVC的novoice,我也面临着一个类似的问题,我只需要显示日期,而不需要显示时间,下面的内容对我有效
而不是@Html.DisplayFor()
。使用
因此,对于上述案例,情况如下:
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;
}
}
<span>@String.Format("{0:D}", model.BirthDate)</span>
Output: Sunday, September 05, 1999
@String.Format(“{0:D}”,model.BirthDate)
产出:一九九九年九月五日(星期日)
不需要,需要添加额外的类/文件进行格式化。对于任何ASPX用户,sumbad答案都有帮助,但这是您的操作方式:
<%=Html.Enconde(String.Format("{0:D}", item.yourDate))%>
希望这对某人有所帮助。感谢您的回复。我是mvc3的新手,您能告诉我如何在场景中实现helper吗?只需创建一个名为ViewFormatter/FormatHelper的类,放入所需的方法,然后在视图或模型中引用此名称空间OK,不知道如何使用。我已经在其中创建了文件夹Decorator和MyModelDecorator.cs。现在,在视图中,我的引用是@model IVRControlPanel.Decorator.mymodeldecordator
。MyModel的属性未绑定,但检测到BirthDate属性。或者,我在做什么wrong@CodeManiac在本例中,MyModel不是属性名,而是BaseItem。你可以给它取任何你喜欢的名字。我不是说它的名字。在我的场景中,我有用户类(作为MyModel)和用户名、电子邮件、密码等属性,这些属性没有绑定到我的view@CodeManiac正确的。。。必须使用MyModel.BaseItem.username等。如果要以MyModel.username的身份访问它们,则必须将它们添加到装饰器类中。