0

我正在嘗試創建一個簡單的創建用戶頁面,其中包含用戶詳細信息和確認密碼字段。Jquery Validation爲真後ModelState.IsValid爲false

我有一個用戶視圖模型和用戶等級:

public class UserViewModel 
{ 
    public User AccountUser { get; set; } 
    [Required] 
    [Compare("AccountUser.Password")] 
    public string ConfirmPassword { get; set; } 
} 

[DisplayName("User Account")] 
public class User 
{ 
    [Required] 
    [DisplayName("Username")] 
    public string Username { get; set; } 
    [Required] 
    [DisplayName("Password")] 
    public string Password { get; set; } 
} 

不匹配的數據進入兩個密碼字段時,將jQuery將成功地告訴我密碼字段不匹配,而且提交按鈕將不會回到我的控制器。

但是,如果我匹配這兩個字段,jQuery將通過它的驗證,提交查詢將觸發回控制器。此時,我的ModelState.IsValid被選中,並且它在Password屬性的錯誤中返回false,引用「Could not find property AccountUser.Password」。

我明白分離的關注模式,但我想了解爲什麼這段代碼不起作用。

有人可以解釋爲什麼modelstate沒有顯示jquery驗證消息後返回false?

回答

0

這可能與您的回帖有關,所以您的客戶端驗證正在工作,但數據沒有完全返回到您的控制器。

在您的控制器中放置一些斷點,並檢查它是否在您的ViewModel中爲您的用戶返回空值。

+0

我看到只要它回來控制器完全填充,在正確的地方所有的值對象。 – Jastill

0

我認爲,你只能使用Compare屬性像[Compare("PropertyName")],不[Compare("Object.PropertyName")] - 因爲錯誤說:... cannot find the property Account.Password ...

您應該改變您的模型和屬性一樣[Compare("Password")]

+0

這不起作用(我試過),因爲密碼屬性不存在於視圖模型本身中,而只存在於子類中。 – Jastill

+0

@Jastill - 我知道這是行不通的!正如我所說:'你應該改變你的模型......' – AminSaghi

+0

我想知道的是爲什麼JavaScript驗證的作品,但一些神奇的幕後模型狀態驗證不會。我原以爲只需要一個驗證程序。如果它通過了jQuery比較匹配,那麼該字段的模型狀態應該沒有錯誤。 – Jastill

相關問題