2016-01-22 55 views
0

我爲我的數據庫用戶表創建一個模型類。我的數據庫表沒有一個confirmPassword字段。但我的班上有它。我如何使用MVC比較屬性只插入表格

public class User 
{ 
    [Key] 
    public int id { get; set; } 

    [Required] 
    public string password{ get; set; } 

    [Compare("password", ErrorMessage = "Re-Type password!")] 
    [NotMapped] 
    public string confirmPassword { get; set; } 
} 

我的插入表格已經在html剃刀中有confirmPassword文本框用於比較,因爲我需要它。

 <div class="form-group"> 
     @Html.LabelFor(m => m.confirmPassword , new { @class = "control-label" }) 
      @Html.TextBoxFor(m => m.confirmPassword , new { @class = "form-control"}) 
      <h5 class="text-danger">@Html.ValidationMessageFor(m=> m.confirmPassword)</h5> 
     </div> 

但我的更新表單還沒有在html中的confirmPassword文本框。所以當我發佈我的更新表單時,ModelState.IsValid總是爲false。我如何使用比較文本字段只插入表單?因爲我不需要在我的更新表單中使用confirmPassword字段。

謝謝。

回答

2

對於插入和更新操作,您應該使用不同的ViewModels。這樣您可以在發佈操作時擁有(並驗證)您自己的插入/更新屬性。

否則,您可以在檢查ModelState.IsValid之前使用ModelState.Remove("confirmPassword");(在更新後操作中)從模型驗證中刪除特定屬性,以便不會在該屬性上觸發驗證。

+0

for one field ModelState.Remove(「confirmPassword」);對我來說很簡單,謝謝你的回答。 – ASPMaker

+0

嗨,我有同樣的問題,但我不問密碼。我添加ModelState.Remove(「密碼」);和ModelState.Remove(「ConfirmPassword」),但它不起作用。 IsValid是錯的......我缺少什麼?謝謝 – Diego

0

如果您有不同的表單需要不同的 ViewModel(不同的數據驗證要求,必填字段等),那麼您可以爲該視圖創建不同的視圖模型類。

例如,創建一個名爲UserUpdate的類(不包括確認密碼字段),並根據需要將其映射到您的域實體。