2011-11-29 74 views
6

我有一個模型的DateTime屬性,在一個地方被放置在一個隱藏的輸入字段。隱藏日期時間的ASP.NET MVC格式

@Html.HiddenFor(m => m.StartDate) 

產生下面的HTML:

<input id="StartDate" name="StartDate" type="hidden" value="1/1/2011 12:00:00 AM" > 

的問題是,該時間包括在價值和我的自定義日期驗證預計的##/## /#格式的日期###因此導致驗證失敗。我可以很容易地改變我的自定義日期驗證,以使這種情況發揮作用,但我寧願這樣做,以便隱藏字段以正確的格式放置該值。

我已經嘗試在模型屬性上使用DisplayFormat屬性,但似乎並沒有改變隱藏輸入的格式。

我意識到我可以手動創建隱藏輸入併爲該值調用StartDate.ToString(「MM/dd/yyyy」),但我也在動態生成的項目列表中使用此模型,以便輸入被索引並且具有像Collection [Some-Guid] .StartDate這樣的id,這將使得找出輸入的id和名稱更困難。

無論如何,當將頁面上的字段渲染爲隱藏的輸入時,會以特定格式顯示「值」值嗎?

回答

9

您可以使用自定義編輯模板:

public class MyViewModel 
{ 
    [UIHint("MyHiddenDate")] 
    public DateTime Date { get; set; } 
} 

,然後定義~/Views/Shared/EditorTemplates/MyHiddenDate.cshtml

@model DateTime 
@Html.Hidden("", Model.ToString("dd/MM/yyyy")) 

終於在您的視圖中使用EditorFor幫手:

@model MyViewModel 
@Html.EditorFor(x => x.Date) 

這將呈現的自定義編輯器模板視圖模型的屬性,並因此使用所需格式呈現隱藏字段的值。

+1

工作就像一個魅力。唯一的缺點是當字段被隱藏時,我不得不爲這個實例創建一個單獨的模型,而不是當我真的需要它可以編輯時。但是,那真的不是一件壞事。 –