2012-11-06 31 views
1

我使用MVC 3在C#,我有一個類與該屬性DisplayFormat ApplyFormatInEditMode

[DisplayFormat(DataFormatString = "{0:dd MMM yyyy}", ApplyFormatInEditMode = true)] 

我想執行驗證當用戶在數據庫EDIT MODE

的數據被存儲用datetime類型此格式

6/15/2009 1:45:30 PM 

我收到此錯誤 錯誤字符串的格式不正確

我beleive問題是在

DataFormatString = 「{0:DD MMM YYYY}」

任何想法如何解決呢?

回答

5

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屬性。

0

0:dd MMM yyyy將期待像06 JUN 2009而不是6/15/2009這樣的字符串。

如何獲得String Not in Correct Format錯誤時輸入字符串?

相關問題