Можно ли использовать 2 атрибута удаленной проверки для одного свойства? - PullRequest
0 голосов
/ 19 августа 2011

Можно ли использовать 2 атрибута удаленной проверки для одного свойства в модели представления?

Что я хотел бы сделать, это выполнить 2 проверки, во-первых, что указанный идентификатор пользователя существует вВо-вторых, это то, что пользователь еще не создал учетную запись в системе.

Я думаю, я всегда мог бы создать собственный атрибут, в котором есть оба теста, но, если это возможно, я бы предпочел просто использовать outфункциональности блока и объедините валидации.

Я не могу действительно объединить логику в один JsonResult, так как мне нужно иметь разные сообщения об ошибках в зависимости от того, как валидация не пройдена, и AFAIK невозможно вернутьсообщение об ошибке с результатом проверки?

Ответы [ 2 ]

1 голос
/ 19 августа 2011

На самом деле, вы можете вернуть отличительное сообщение об ошибке, используя удаленную проверку MVC3. См., Например, http://msdn.microsoft.com/en-us/library/gg508808(v=vs.98).aspx или http://deanhume.com/Home/BlogPost/mvc-3-and-remote-validation/51.

1 голос
/ 19 августа 2011

Я не уверен, что вы ожидаете с точки зрения «готовой функциональности», но вы можете создать два атрибута достаточно просто.В MVC 3 у вас также есть возможность извлечь вашу модель из IValidatableObject и реализовать метод Validate.Последний предоставляет вам возможность выполнить несколько проверок нескольких свойств в контексте друг друга, если вы обнаружите необходимость.

Вот как вы можете реализовать атрибут ValidationAttribute и украсить свое свойство.Вам понадобятся два из них, поэтому я назову этот UsernameExistsAttribute, и мы представим, что вы создали еще один с именем AccountAlreadySetupAttribute, переопределяющий тот же метод IdValid.

public class UsernameExistsAttribute : ValidationAttribute
{
    public override bool IsValid(object value)
    {
        if((string)value == "Bob")
            return false;
        else
            return true;
    }
}

И вв вашей модели представления вы украшаете атрибут следующим образом:

public class FreakinSweetViewModel
{
    [UsernameExists(ErrorMessage="Username exists")]
    [AccountAlreadySetup(ErrorMessage="Account is not setup")]
    public string Username { get; set; }
}

Это соединит проверку на стороне клиента и сервера из поля MVC 3.

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