0

私は2つの日付を持つモデルを持っています.Proposed "08/07/2013 08:00:00"とCurrentFocusDate "08/07/2013 00:00:00"として両方を渡しますが、ページのように何かがうまくいかないそれらは異なる方法でレンダリングされます (以下の出力を参照)。

モデル

public AdminNoteViewModel
{
    [HiddenInput(DisplayValue = false)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime ProposedDateTime { get; set; }

    [HiddenInput(DisplayValue = true)]
    [DisplayFormat(DataFormatString = "{0:dd/MM/yyyy}")]
    public DateTime CurrentFocusDate { get; set; }

    [HiddenInput(DisplayValue = true)]
    public string NavigationLink { get; set; }
}

意見

@Html.EditorFor(model => model.ProposedDateTime)
@Html.ValidationMessageFor(model => model.ProposedDateTime)

@Html.EditorFor(model => model.CurrentFocusDate)

@Html.HiddenFor(model => model.NavigationLink)

コントローラ

 public ActionResult AddNote(DateTime proposedEventDateTime, long productId, DateTime currentFocusDate, string navigationLink)
 { 
     var model = new AdminNoteViewModel
     {
         ProductId = productId,
         ProposedDateTime = proposedEventDateTime,
         CurrentFocusDate = currentFocusDate,
         NavigationLink = navigationLink
     };

     return View(model);
 }

これはレンダリングされたソースです

<input data-val="true" data-val-date="The field ProposedDateTime must be a date." data-val-required="The ProposedDateTime field is required." id="ProposedDateTime" name="ProposedDateTime" type="hidden" value="07/08/2013 08:00:00" />
<span class="field-validation-valid" data-valmsg-for="ProposedDateTime" data-valmsg-replace="true"></span>

<input data-val="true" data-val-date="The field CurrentFocusDate must be a date." data-val-required="The CurrentFocusDate field is required." id="CurrentFocusDate" name="CurrentFocusDate" type="hidden" value="08/07/2013 00:00:00" />

<input id="NavigationLink" name="NavigationLink" type="hidden" value="Civica.DrugAdmin.UI.Models.AdminNoteViewModel" />

デバッグすると、ビューに表示されたモデルの両方の日付が正しくフォーマットされていますが、ページにレンダリングすると、そのうちの 1 つ (currentFocusDate) が切り替えられます。

4

1 に答える 1

3

設計上、HiddenForヘルパー (最終的には EditorFor によって使用されます) は、その値をレンダリングするときに常に現在のカルチャ形式を使用します。この動作をオーバーライドしたい場合は、カスタム エディター テンプレート ( ~/Views/Shared/EditorTemplates/HiddenInput.cshtml)を記述できます。

@if (!ViewData.ModelMetadata.HideSurroundingHtml) 
{
    @ViewData.TemplateInfo.FormattedModelValue
}
@Html.Hidden("", ViewData.TemplateInfo.FormattedModelValue)

次に、DisplayFormat属性を使用して形式を指定し、現在のカルチャの形式をオーバーライドできます。

[HiddenInput(DisplayValue = false)]
[DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:dd/MM/yyyy}")]
public DateTime ProposedDateTime { get; set; }
于 2013-08-06T15:16:14.590 に答える