【问题标题】:DisplayFormat Model attribute to transform string values用于转换字符串值的 DisplayFormat 模型属性
【发布时间】:2012-08-22 07:43:47
【问题描述】:

我目前正在开发一个 ASP.NET MVC 3 项目,该项目使用模型上的属性来允许快速创建视图([Required][DisplayName("foo")] 等属性...)

在这个项目中,我将一些日期存储值格式化为字符串,例如“20120801”。

有没有办法使用属性:

[DisplayFormat(DataFormatString = "something")]  

或其他将 YYYYMMDD 转换为 YYYY-MM-DD 的东西。在我的示例中,显示视图“2012-08-01”而不是“20120801”。

提前致谢!

【问题讨论】:

标签: c# asp.net-mvc


【解决方案1】:

您需要更新您的模型,使其看起来像这样:

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 助手。

【讨论】:

  • Si真的不可能对字符串值进行转换吗?
【解决方案2】:

我最终得到了这个解决方案

[ScaffoldColumn(false)]
public string MyValueFormattedAsYYYYMMDD { get; set; }

public string MyValueAsFormattedDate
{
    get
    {               
        return MyClassToTransform.MyTransformMethod(this.MyValueFormattedAsYYYYMMDD);
    }
}

使用这种方法,我“脚手架”(隐藏)未格式化的列,并使用 getter 创建一个属性以显示格式化的字符串。

你觉得这个怎么样?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 2014-11-25
    • 2014-10-13
    • 2016-05-24
    • 2018-11-18
    • 2017-02-17
    相关资源
    最近更新 更多