web-dev-qa-db-ja.com

EditorFor()でフォーマットされた日付を表示する

MVC4とEntity Frameworkを使用してイントラネットWebアプリを開発しています。編集できる人のリストがあります。編集ビューにアクセスすると、「開始日」というテキストボックスに、日付が7/11/2013 00:00:00のように表示されます。私がしたいのは、yyyy/MM/ddの形式で表示することです。 String.Format("{0:yyyy/MM/dd}", item.StartDate)を試しましたが、機能しません。注釈[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}")]も試しましたが、どちらも機能しません。

私の見解では、これがあります:

<div class="editor-field">
        @Html.TextBoxFor(model => model.StartDate, new { @class = "datepicker" })
        @Html.ValidationMessageFor(model => model.StartDate)
    </div>

方法についてのアイデアはありますか?

56
Traffy
@Html.TextBoxFor(m => m.StartDate, 
    new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })
103
Vladimir

enter image description here

あなたの質問はEditorFor()を求めていますが、あなたが提供したコードはTextboxFor()を使用しています。

Model(例:MyModel.cs)には、次のものが必要です。

public class MyModel
{
    [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]
    public DateTime StartDate { get; set; }
}

View(例えば、Index.cshtml)で、あなたが書いたようにそれを使うだけです:

@Html.EditorFor(m => m.StartDate, new { htmlAttributes = new { @class = "datepicker" } })

期待どおりに動作します。

(ビューでの表示方法を変更する代わりに)そのようにすることで、モデルを別の場所で再利用でき、ビューでの日付の表示方法を指定する必要がありません。そのため、何らかの理由で表示形式を変更する必要がある場合は、一度変更するだけで済みます。

このソリューションはMVC 5でも機能します。

72
Maxime

私にとって一番簡単なのは、type属性を追加することでした。

@Html.EditorFor(model => model.FechaRegistro, new { htmlAttributes = new { @class = "form-control oso" ,@type = "date"  } })

Html.EditorFor Work


@Html.EditorFor(model => model.StartDate, new { htmlAttributes = new { @class = "datepicker", @Value = model.StartDate.ToString("yyyy/MM/dd") } })
1
s.c

これを試して

<div class="editor-field">
    @Html.TextBoxFor(model => model.StartDate, new { htmlAttributes = new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), type = "date"  }})
    @Html.ValidationMessageFor(model => model.StartDate)
</div>
0
nAyeem

私はここで(そしてMVCでも)初心者です、これはMaximeが部分クラスを使用していることの単なるバリエーションです...

DBファーストモデルがあり、変更を失うことを恐れて直接モデルを変更したくない場合は、独自の部分クラスで同じことを行ってください。 Modelsフォルダー内に新しいクラス/ファイルを追加し、生成されたモデルと同じ名前空間を使用するようにしてください。

メタデータを宣言して、日付の書式設定と別の値の表示名の変更(つまり、テーブルの列ヘッダーを短縮する)の両方を宣言する方法は次のとおりです。

namespace MyProjectName.Models
{

    public class MyModelMeta
    {

        [DisplayFormat(DataFormatString = "{0:yyyy/MM/dd}", ApplyFormatInEditMode = true)]  // format used by Html.EditorFor
        public DateTime StartDate;

        [Display(Name = "User ID")] // abbreviation shown in Html.DisplayNameFor
        public string SomeReallyLongUserIDColumn;

    }

    [MetadataType(typeof(MyModelMeta))]
    public partial class MyModel
    {

    }
}
0
xyvyx