我是 MVC3 的新手,并且仍在尝试学习良好的编程实践。我有一段时间试图格式化 DateTime?正在我的 MVC3 项目中显示,该项目没有与日期来自的类关联的显式 ModelName.cs 文件。
我们已经有一个数据库,并使用了一个 .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