2010-05-30 117 views
0

我目前使用DataAnnotations來驗證我的MVC 2應用程序。但是,我遇到了一個小問題。模型中的MVC驗證

我目前有一個類型爲User的對象,它具有許多屬性。所有這些都是必需的。

public class User 
    { 

     [Required(ErrorMessage = "Username is required")] 
     public string Username { get; set; } 

     [Required(ErrorMessage = "Password is required")] 
     public string Password { get; set; } 

     [Required(ErrorMessage = "Email is required")] 
     public string Email { get; set; } 

     [Required(ErrorMessage = "First name is required")] 
     public string Firstname { get; set; } 

     [Required(ErrorMessage = "Last name is required")] 
     public string Lastname { get; set; } 


    } 

註冊時,這些都使用模型綁定器映射,一切都很好。但是,在「編輯我的詳細信息」頁面上,只有名字,姓氏和電子郵件可以更新。 每當查看帖子回來和modelbinding應用我得到一個警報用戶名/密碼是必填字段。儘管在這一點上它不是必需的。我想過兩種方法來解決這個問題,我覺得這兩種方法都不適合(但可能是錯誤的)

1:創建一個自定義視圖模型。這樣可以正常工作,但數據註釋需要應用於此視圖模型,這意味着對模型和用戶對象進行重複驗證。

2:將所有字段包含在渲染視圖中並將其發回。這具有安全風險,看起來非常混亂,並且不能很好地適應複雜的視圖模型。

任何人都可以推薦這種情況的最佳做法嗎?

回答

1

最近有類似問題: Needing to copy properties before validation。作爲迴應,我建議創建自定義ModelBinder僅用於此特定操作,我仍然認爲這是最佳解決方案。

+0

感謝您的鏈接@tpeczek。你的解決方案是一個很好的選擇,但是我已經決定在閱讀Jimmy Bogard在http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/06/29/上發表的文章後,去1:1 View:ViewModel設置。 how-we-do-mvc-view-models.aspx。 – WDuffy 2010-05-30 20:10:45

0
DataType 

Specify the datatype of a property 
DisplayName 

specify the display name for a property. 
DisplayFormat 

specify the display format for a property like different format for Date proerty. 
Required 

Specify a property as required. 
ReqularExpression 

validate the value of a property by specified regular expression pattern. 
Range 

validate the value of a property with in a specified range of values. 
StringLength 

specify min and max length for a string property. 
MaxLength 

specify max length for a string property. 
Bind 

specify fields to include or exclude when adding parameter or form values to model properties. 
ScaffoldColumn 

specify fields for hiding from editor forms. 

using System.ComponentModel; 
using System.ComponentModel.DataAnnotations; 
using System.Web.Mvc; 
namespace Employee.Models 
{ 
[Bind(Exclude = "EmpId")] 
public class Employee 
{ 
[ScaffoldColumn(false)] 
public int EmpId { get; set; } 
[DisplayName("Employee Name")] 
[Required(ErrorMessage = "Employee Name is required")] 
[StringLength(100,MinimumLength=3)] 
public String EmpName { get; set; } 
[Required(ErrorMessage = "Employee Address is required")] 
[StringLength(300)] 
public string Address { get; set; } 
[Required(ErrorMessage = "Salary is required")] 
[Range(3000, 10000000,ErrorMessage = "Salary must be between 3000 and 10000000")] 
public int Salary{ get; set; } 
[Required(ErrorMessage = "Please enter your email address")] 
[DataType(DataType.EmailAddress)] 
[Display(Name = "Email address")] 
[MaxLength(50)] 
[RegularExpression(@"[a-z0-9._%+-][email protected][a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Please enter correct email")] 
public string Email { get; set; } 
} 
} 
+0

像這樣的僅有代碼的答案對社區沒有幫助。注意詳細說明*如何回答原來的問題? – Werner 2014-03-13 20:13:32