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>
方法についてのアイデアはありますか?
@Html.TextBoxFor(m => m.StartDate,
new { @Value = Model.StartDate.ToString("yyyy/MM/dd"), @class="datepicker" })
あなたの質問は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でも機能します。
私にとって一番簡単なのは、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") } })
これを試して
<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>
私はここで(そして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
{
}
}