Проверка MVC в модели - PullRequest
0 голосов
/ 30 мая 2010

В настоящее время я использую DataAnnotations для проверки моего приложения MVC 2. Однако я столкнулся с небольшой проблемой.

В настоящее время у меня есть объект типа 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; }


    }

При регистрации все они отображаются с помощью связывателя моделей, и все отлично работает. Однако на странице «Изменить мои данные» могут быть обновлены только имя, фамилия и адрес электронной почты. Всякий раз, когда просмотр сообщений назад и привязка модели применяются, я получаю предупреждение Имя пользователя / пароль является обязательным полем. Хотя это и не требуется на данный момент. Я подумал о двух способах обойти это, ни один из которых я не считаю подходящим (но, возможно, ошибочным)

1: создание пользовательской модели представления. Это будет работать нормально, но аннотации данных необходимо будет применить к этой модели представления, что означает проверку дубликатов на модели и объекте пользователя.

2: Включить все поля в представление renderd и опубликовать их обратно. Это создает угрозу безопасности, выглядит очень грязно и плохо подходит для сложных моделей.

Кто-нибудь может порекомендовать лучшую практику для этой ситуации?

Ответы [ 2 ]

1 голос
/ 30 мая 2010

Недавно был похожий вопрос: Необходимость копирования свойств перед проверкой . В ответ я предложил создать собственный ModelBinder для использования только в этом конкретном действии, и я все еще считаю, что это лучшее решение.

0 голосов
/ 13 марта 2014
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._%+-]+@[a-z0-9.-]+\.[a-z]{2,4}", ErrorMessage = "Please enter correct email")]
public string Email { get; set; }
}
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...