我目前正在开发一个ASP.NET MVC 3项目,在模型上使用Attributes以允许快速创建视图([Required]
,[DisplayName("foo")]
等属性...)
在这个项目中,我有一些日期存储值格式化为字符串,例如“20120801”。
有没有办法使用该属性:
[DisplayFormat(DataFormatString = "something")]
或其他将YYYYMMDD转换为YYYY-MM-DD的东西。在我的示例中,显示在视图“2012-08-01”而不是“20120801”。
提前感谢!
答案 0 :(得分:2)
您需要更新模型,如下所示:
public class Person
{
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy-mm-dd}")]
public DateTime DateOfBirth { get; set; }
}
您的控制器可能需要先解析字符串:
public ActionResult Index()
{
Person p = new Person();
p.DateOfBirth = DateTime.ParseExact("20120801","yyyyddmm",System.Globalization.CultureInfo.InvariantCulture);
return View(p);
}
然后要在您的视图中显示它,您将需要使用类似于以下代码的内容:
<fieldset>
<legend>Person</legend>
<div class="editor-label">
@Html.LabelFor(model => model.DateOfBirth)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.DateOfBirth)
@Html.ValidationMessageFor(model => model.DateOfBirth)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
出于某种原因,DisplayFormat属性似乎只适用于EditorFor和DisplayFor助手。
答案 1 :(得分:0)
我最终得到了这个解决方案
[ScaffoldColumn(false)]
public string MyValueFormattedAsYYYYMMDD { get; set; }
public string MyValueAsFormattedDate
{
get
{
return MyClassToTransform.MyTransformMethod(this.MyValueFormattedAsYYYYMMDD);
}
}
使用这种方法,我“支架”(隐藏)未格式化的列,并使用getter创建一个属性以显示格式化的字符串。
你怎么看待这个?