2012-03-20 96 views
3

我有以下幾點:MVC3比較屬性和嵌套的對象屬性

public class Address 
{ 
    public string Email { get; set; } 
} 

public class CheckoutViewModel 
{ 
    public Address Address { get; set; } 

    [Compare("Address.Email", ErrorMessage = "The email addresses you entered do not match")] 
    public string ConfirmEmailAddress { get; set; } 
} 

使用客戶端JS,這個工作的治療和驗證正確。但是,在未啓用JavaScript的情況下進行測試時,表單發佈回來,但ModelState錯誤消息爲:

找不到名爲Address.Email的屬性。

任何想法爲什麼這可以在客戶端,但不是服務器?這種情況下的解決方案是什麼?

非常感謝。

回答

2

如果您查看生成的HTML源代碼,您應該發現Email的輸入元素被稱爲「Address.Email」,這就是驗證在客戶端運行的原因。

但是它看起來像該屬性不是爲了處理嵌套屬性而構建的,所以在服務器級別它不起作用(因爲沒有名爲「Address.Email」的屬性)。因此,您需要確保兩個屬性處於同一級別(無論是在ViewModel還是在Address類中)。

如果可能將電子郵件地址屬性放到視圖模型上,然後再填充地址對象,那麼這是最好的選擇。