Отключить проверку на определенных полях - PullRequest
4 голосов
/ 26 марта 2010

У меня есть ViewModel для добавления пользователя со свойствами: Email, Пароль, ConfirmPassword с атрибутом Required для всех свойств. При редактировании пользователя я хочу, чтобы свойства Password и ConfirmPassword не требовались.

Есть ли способ отключить проверку для определенных свойств в различных действиях контроллера или лучше всего создать отдельную EditViewModel?

Ответы [ 2 ]

3 голосов
/ 26 марта 2010

Мне нравится разбивать его и создавать базовую модель со всеми общими данными и наследованием для каждого представления:

class UserBaseModel
{
    int ID { get; set; }

    [Required]
    string Name { get; set; }       

    [Required]
    string Email { get; set; }               
    // etc...
}

class UserNewModel : UserBaseModel
{
    [Required]
    string Password { get; set; }

    [Required]
    string ConfirmPassword { get; set; }
}

class UserEditModel : UserBaseModel
{
    string Password { get; set; }
    string ConfirmPassword { get; set; }
}

Интересно узнать, есть ли лучший способ, хотя этот способ кажется очень чистым и гибким.

0 голосов
/ 26 марта 2010

Вы можете написать собственный атрибут, который может проверять условие и разрешать пустое поле или не разрешать его.

Ниже приведена простая демонстрация, которую я собрал для ребят здесь. Вам нужно будет изменить в соответствии с вашими целями /

    using System.ComponentModel.DataAnnotations;

    namespace CustomAttributes

    {

    [System.AttributeUsage(System.AttributeTargets.Property)]

    public class MinimumLength : ValidationAttribute

    {
        public int Length { get; set; }
        public MinimumLength()
        {
        }

        public override bool IsValid(object obj)
        {
            string value = (string)obj;
            if (string.IsNullOrEmpty(value)) return false;
            if (value.Length < this.Length)
                return false;
            else
                return true;
        }
    }
}

Модель;

using CustomAttributes;

namespace Models
{
    public class Application
    {
        [MinimumLength(Length=20)]
        public string name { get; set; }
    }
}

Контроллер

 [AcceptVerbs(HttpVerbs.Post)]
public ActionResult Index(Application b)
{
    ViewData["Message"] = "Welcome to ASP.NET MVC!";

    if (ModelState.IsValid)
    {
        return RedirectToAction("MyOtherAction");
    }
    return View(b);
}

enter code here
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...