我想創建一個MVC模型驗證屬性,填寫以下情況: 我已經創建了幾個模型(生日和PhoneNumber是excellant示例)視圖上的多個輸入字段(月,日,年;區號,交換,後綴)。在ASP.Net嵌套模型的客戶端驗證MVC
public class PhoneNumber
{
[RegularExpression("^([2-9][0-8][0-9])$", ErrorMessage = "Invalid Area Code")]
public virtual string AreaCode { get; set; }
[RegularExpression("^([2-9][0-9][0-9])$", ErrorMessage = "Invalid Phone Exchange")]
public virtual string Exchange { get; set; }
[RegularExpression("^([0-9][0-9][0-9][0-9])$", ErrorMessage = "Invalid Phone Suffix")]
public virtual string Suffix { get; set; }
}
我經常將這些模型嵌套在其他模型中(例如,Person具有PhoneNumber和Birthday)。有時候,在我看來,PhoneNumber是必需的,有時不是。 我可以通過將類實現爲IValidatableObject來處理服務器端的這些情況,但是如果我想要執行客戶端驗證,或者甚至只是通過屬性進行服務器端驗證,我會遇到麻煩。
我想我將不得不建立自己的自定義驗證屬性,但我甚至不知道從哪裏開始訪問多個級別上的對象和屬性信息。有沒有人遇到過這樣的事情?任何好的想法都指向正確的方向?
在此先感謝!
--------更新------
通過使用IClientValidatable和GetClientValidationRules,我有機會獲得ModelMetadata可以得到容器的類型。問題在於容器是生日或電話號碼,而不是頂級模型的類型,這是最重要的。 ModelMetadata尚未填充Model屬性,因爲可能還沒有。我真正想要做的是獲得頂級模型的類型。任何人有任何見解?
是的,我已經使用過去的擴展模型綁定到數組。我使用了@ Html.TextBoxFor(m => m.PhoneNumber.AreaCode),或者使用了「RequiredPhoneNumber」類,但是如果我想使用像IPerson這樣的接口並不是特別可擴展的,電話號碼。 – Boomtown 2012-08-09 13:25:11