Проверка ASP.NET MVC2 FormCollection против модели - PullRequest
2 голосов
/ 11 апреля 2011

Допустим, у меня есть настройка класса пользователя с проверкой, подобной этой:

[MetadataType(typeof(ssUserMetaData))]
public partial class ssUser
{

}

class ssUserMetaData
{
    [Required(ErrorMessage = "Name is a required field.")]
    [StringLength(100, ErrorMessage = "Name must be 100 characters or less.")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Username is a required field.")]
    [StringLength(50, ErrorMessage = "Username must be 50 characters or less.")]
    public string Username { get; set; }

    [Required(ErrorMessage = "Email address is a required field.")]
    [Email(ErrorMessage = "Email address must be a valid format.")]
    [StringLength(100, ErrorMessage = "Email address must be 100 characters or less.")]
    [DisplayName("Email address")]
    public string Email { get; set; }

    [Required(ErrorMessage = "Password is a required field.")]
    [StringLength(1000, MinimumLength = 6, ErrorMessage = "Passwords must be at least 6 characters long.")]
    [DisplayName("Password")]
    public string PasswordHash { get; set; }
}

Теперь у меня есть метод обновления, который позволяет пользователям обновлять только пару полей, таких как Имя и Электронная почта. Я не хочу повторно отправлять все данные для этой формы, чтобы передать привязку модели, но я хотел бы использовать настроенные здесь правила проверки для проверки конкретного значения в коллекции форм.

Что-то вроде этого воображаемого кода ...

bool result = ModelState.ValidateField("Email", formCollection["Email"]);

Есть ли способ сделать что-то подобное, чтобы я мог избежать повторения моих правил проверки? Спасибо!

1 Ответ

2 голосов
/ 11 апреля 2011

А как насчет того, чтобы маленькая форма использовала класс NameAndEmail, а большая форма - SsUserMetaData?

class NameAndEmail
{
    [Required(ErrorMessage = "Name is a required field.")]
    [StringLength(100, ErrorMessage = "Name must be 100 characters or less.")]
    public string Name { get; set; }


    [Required(ErrorMessage = "Email address is a required field.")]
    [Email(ErrorMessage = "Email address must be a valid format.")]
    [StringLength(100, ErrorMessage = "Email address must be 100 characters or less.")]
    [DisplayName("Email address")]
    public string Email { get; set; }
}
class SsUserMetaData : NameAndEmail
{
    [Required(ErrorMessage = "Username is a required field.")]
    [StringLength(50, ErrorMessage = "Username must be 50 characters or less.")]
    public string Username { get; set; }


    [Required(ErrorMessage = "Password is a required field.")]
    [StringLength(1000, MinimumLength = 6, ErrorMessage = "Passwords must be at least 6 characters long.")]
    [DisplayName("Password")]
    public string PasswordHash { get; set; }
}
...