1

私は現在、モデルの属性を使用してASP.NET MVC 3プロジェクトに取り組んでおり、ビューを高速に作成できます(などの属性[Required]) [DisplayName("foo")]

このプロジェクトでは、たとえば「20120801」のような文字列としてフォーマットされた値を保存する日付があります。

属性を使用する方法はありますか:

[DisplayFormat(DataFormatString = "something")]  

または、YYYYMMDD を YYYY-MM-DD に変換する他の何か。私の例では、「20120801」ではなく「2012-08-01」を表示しています。

よろしくお願いします!

4

2 に答える 2

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 ヘルパーでのみ機能するようです。

于 2012-08-22T10:31:05.713 に答える
0

私はこの解決策で終わった

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

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

この方法では、書式設定されていない列を「足場」(非表示) にし、書式設定された文字列を表示する getter を使用してプロパティを作成します。

これについてどう思いますか?

于 2012-08-22T14:33:31.097 に答える