我是MVC3的新手,我仍然试图抓住良好的编程习惯。我有一段时间试图格式化日期时间?显示在我的MVC3项目中,该项目没有与日期来自的类相关联的显式ModelName.cs文件。MVC3格式可为空TextBoxFor中的DateTime而不更改模型
我们已经有了一个数据库,并使用一个.edmx(我们称之为Pooling.edmx)来获取我们的模型。我显然不想编辑设计器文件以适应这种广泛接受的解决方案:Date only from TextBoxFor()。
然后,我试过其他的解决方案,我发现这里:它采用Using Html.TextBoxFor with class and custom property (MVC)
:
@Html.TextBoxFor(m => m.Name, new { data_bind="value: Name", @class = "title width-7" })
这个工作,因为我是能够使用自定义属性,加类名,并设置一个值都在一旦。
我转变了这个:
@Html.TextBoxFor(m => Model.PrePoolOwner.OglDateEffective, new Dictionary<string, object> { { "class", "check-dirty input-small datePicker" }, { "data-original-value", @Model.PrePoolOwner.OglDateEffective } })
到这个(这似乎真难看......并导致我的问题):
@Html.TextBoxFor(m => Model.PrePoolOwner.OglDateEffective, new { data_original_value = Model.PrePoolOwner.OglDateEffective.HasValue ? Model.PrePoolOwner.OglDateEffective.Value.ToString("MM/dd/yyyy") : null, @class = "datePicker check-dirty", @Value = Model.PrePoolOwner.OglDateEffective.HasValue ? Model.PrePoolOwner.OglDateEffective.Value.ToString("MM/dd/yyyy") : null })
是更好地找到并使用这些其他方式(如下划线将转换成破折号等)来显示信息,或者我应该有一个ModelName.cs文件来改变它在模型级别的显示方式吗?
出于某种原因,我觉得有一个巨大的Pooling.edmx文件,映射出我们的数据库,现在限制了我们,并且将来我们将如何随着网站的发展访问/呈现/更改数据。
为了得到这是由Model.PrePoolOwner.OglDateEffective调用上面一个“PrePoolOwner”对象,我们有一个PrePoolOwnerRow.cs文件的作用:
namespace OCC_Tracker.Models
{
public class PrePoolOwnerRow
{
public bool Dirty { get; set; }
public bool Delete { get; set; }
public PrePoolOwner PrePoolOwner { get; set; }
public PrePoolOwnerRow(PrePoolOwner owner)
{
this.Dirty = false;
this.Delete = false;
this.PrePoolOwner = owner;
}
public PrePoolOwnerRow()
{ }
}
}
然后,我们在我们的.cshtml顶部调用文件
@model OCC_Tracker.Models.PrePoolOwnerRow
您是否将视图绑定到.edmx模型?如果是这样,你不应该这样做 - 总是创建视图模型绑定到你的MVC视图。 –
是的,听起来像你将视图绑定到域/实体模型。您应该在MVC项目中设置单独的视图模型,然后将您的域/实体模型映射到视图模型。 –
阅读[本文](http://lostechies.com/jimmybogard/2009/06/30/how-we-do-mvc-view-models/)帮助我理解视图模型与领域模型。 –