DisplayFormat
屬性字面上只是用於顯示值。如果您設置了ApplyFormatInEditMode
,則它將在文本框(用於編輯)中顯示時將其格式應用於數據內容。這與驗證無關。
如果要使用指定的格式驗證輸入,您可能必須創建自己的ValidationAttribute
,並使用DateTime.ParseExact()
來嘗試確保它符合您期望的格式。唯一的缺點是,除非您編寫它,否則它不會有伴隨的客戶端驗證邏輯。
我還沒有徹底地測試過,但它應該給你一個開始。
public class DateTimeFormatAttribute : ValidationAttribute
{
public int Format { get; set; }
public override bool IsValid(object value)
{
if (value == null)
return true;
DateTime val;
try
{
val = DateTime.ParseExact(value.ToString(), Format, null);
}
catch(FormatException)
{
return false;
}
//Not entirely sure it'd ever reach this, but I need a return statement in all codepaths
return val != DateTime.MinValue;
}
}
那麼這只是使用它的問題。 [DateTimeFormat(Format = "dd MMM yyyy")]
更新:對不起,我不認爲我清楚地看到你的問題。它抱怨回發數據的原因是因爲你試圖使用的格式不是標準格式。在填充字段時,您可能更適合在線上使用常用日期選擇器,而不是手動編輯或期望非標準格式。自定義顯示格式非常適合顯示,但是如果您想要使用默認的DateTime.Parse
不理解的編輯模式的自定義格式,則必須編寫自己的ModelBinder,我相信這是我沒有做過的事情,或者你可以將viewmodel上的數據類型改爲字符串,並在action方法中自己解析它(你仍然可以使用我在這種情況下提供的驗證器)。爲了擺脫你的錯誤(但也會在編輯模式下刪除你的自定義格式),你必須刪除ApplyFormatInEditMode
屬性。