2012-01-13 22 views
1

模型如何擴展RemoteAttribute以進入ModelState?

 

[Remote("ValidateDuplicateUsername", "Account", ErrorMessage = "Username is already taken")] 
public string Username { get; set; } 
 

控制器

 

ModelState.IsValid 
 

RequiredAttribute自動如果該字段是無效的添加條目ModelState。 然後它在視圖中顯示錯誤消息。

我怎樣才能做到這一點使用RemoteAttribute?所以當我調用ModelState.IsValid時,它也驗證遠程驗證?

回答

0

的RequiredAttribute標籤自動添加條目的ModelState如果字段無效

不,你必須有一些誤解。 Required屬性不會向ModelState添加任何內容。驗證屬性無權訪問ModelState,也不能訪問HttpContext。它們重寫IsValid方法並返回true或false來指示模型是否有效。它是默認的模型聯編程序,它在嘗試從添加錯誤到ModelState的請求中綁定模型時執行驗證。數據註釋被設計爲獨立於MVC。他們在一個單獨的程序集(System.ComponentModel.DataAnnotations)中,並在WPF,Silverlight ...應用程序中使用它們。所以你明白ModelState的概念沒有意義。

所以,如果你看的IsValid實施RemoteAttribute的,你會發現以下內容:

public override bool IsValid(object value) 
{ 
    return true; 
} 

這就是爲什麼RemoteAttribute認爲你的模型是有效的,當你發佈形式的原因。您可以編寫自定義遠程驗證屬性並覆蓋此方法。

+0

「...數據註釋被設計爲獨立於MVC ...」爲什麼在System.Web.Mvc命名空間中駐留RemoteAttribute?在WPF中,您不使用這種屬性。有這個IDataErrorInfo。更好地堅持asp.net mvc Darin ;-) – Elisabeth 2012-05-30 19:30:07

+0

Remote屬性是一個特定的ASP.NET MVC驗證屬性:它使用客戶端JavaScript,這在其他應用程序(如WPF)中沒有任何意義。 – 2012-05-30 19:31:34

+0

好吧,因爲你在上面的赫赫寫了你的解決方案。順便說一句。你是一個問答者:P – Elisabeth 2012-05-30 19:32:30