2010-05-22 52 views
2

我在VS 2010中玩MVC2,我真的很喜歡它。在我從頭開始的沙箱應用程序中,我的數據庫用ADO.NET實體數據模型表示,並且使用Scott Guthrie的「夥伴類」方法對數據模型中的字段進行了大量驗證,該方法工作得很好。在MVC2中,如何驗證不在我的數據模型中的字段?

但是,在我設計並正在嘗試的用戶註冊表單中,我想添加一個「確認電子郵件地址」或「確認密碼」字段。由於這些字段顯然不會存在於我的數據模型中,我將如何驗證這些字段客戶端和服務器端?

我想實現類似'Html.ValidationMessageFor'的東西,但這些字段在數據模型中不存在。任何幫助將不勝感激。

回答

1

客戶端:

  • 使用JavaScript驗證

和/或

服務器端:

  • 驗證在控制器(使用FormCollection) -
  • 創建「CustomViewModel」類,它將所有的驗證強烈鍵入您的視圖 -

你可以在兩個字符串屬性添加到您的Model。這樣做將允許您在Controller中填充模型實例並在您的Model/s中正確驗證...

4

我使用視圖模型。我不創建數據模型實例,直到視圖模型有效。 下面是一個簡單的例子。請注意,某些屬性的數據模型,但驗證屬性只有在這個視圖模型存在(基本是不相關的在這裏)

public class ProblemAddToDepartmentProductView : ViewModel 
{ 
    public Problem Problem { get; set; } 
    public IList<Product> AllProducts { get; set; } 
    public IList<Department> AllDepartments { get; set; } 
    public string ProblemId { get; set; } 
    public string ProblemName { get; set; } 

    [DisplayName("Choose the product:")] 
    [Required(ErrorMessage = "Select the Product.")] 
    public string SelectedProduct { get; set; } 

    public SelectList GetProducts() 
    { 
     var selectList = new SelectList(AllProducts, "Id", "Name"); 
     return selectList; 
    } 
    [DisplayName("Choose the department using this problem for that product:")] 
    [Required(ErrorMessage = "Select the Department.")] 
    public string SelectedDepartment { get; set; } 


    public SelectList GetDepartments() 
    { 
     var selectList = new SelectList(AllDepartments, "Id", "Name"); 
     return selectList; 
    } 

    internal class ProductSelect 
    { 
     public Guid Id { get; set; } 
     public string Name { get; set; } 
    } 

} 

這也將有助於看到它的有線頁面上。

<fieldset> 
     <legend>Fields</legend> 
     <div class="editor-label"> 
      <%= Html.LabelFor(x => x.SelectedProduct) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.DropDownListFor(x => x.SelectedProduct, Model.GetProducts(),"--Select One--") %> 
      <%= Html.ValidationMessageFor(x => x.SelectedProduct)%> 
     </div> 
     <div class="editor-label"> 
      <%= Html.LabelFor(x => x.SelectedDepartment) %> 
     </div> 
     <div class="editor-field"> 
      <%= Html.DropDownListFor(x => x.SelectedDepartment, Model.GetDepartments(),"--Select One--") %> 
      <%= Html.ValidationMessageFor(x => x.SelectedDepartment)%> 
     </div> 

     <p> 
      <input type="submit" value="Add Selected" /> 
     </p> 
    </fieldset> 

我也這樣做,所以如果驗證失敗的車型將擁有這些價值觀,拉回到了所需的數據的下拉菜單:

p.ProblemId)%>

< %= Html.HiddenFor(p => p.ProblemName)%>

相關問題