Требовать проверки только в том случае, если поле видимо

Я использую атрибут [Required] для проверки на стороне клиента в ASP.NET MVC 3.

Класс выглядит так:

public class User
{
    [Required(ErrorMessage = "First Name is required")]
    public string FirstName { get; set; }
}

Я хочу, чтобы поле FirstName проверялось, только если оно видимое, которое будет отображаться только при определенных условиях. Как я могу это сделать?

Я использовал следующее, но все же он проверяет правильное поле этого скрытого поля.

$('#registerForm').validate({ ignore: ":not(:visible)" });

Ответы

Ответ 1

С некоторыми полезными подсказками от @Josiah я могу перейти к моему требованию.

Добавьте класс RequiredIfAttribute и необходимый javascript. См. Условная проверка в ASP.NET MVC 3

И в классе добавьте атрибут RequiredIf как:

public class User
{
[RequiredIf("hFirstName", "true", ErrorMessage = "First Name is required")]
public string FirstName { get; set; }

и в aspx:

@Html.TextBoxFor(model => Model.FirstName, new { @style = "height:auto;" })
@Html.ValidationMessageFor(model => Model.FirstName)
@Html.Hidden("hFirstName")

Задайте значение hFirstName равным "true", если поле FirstName скрыто и "false", если оно видимо.

Магия работает с этими изменениями. Спасибо @Josiah Ruddell за ответ

Ответ 2

Я бы создал условно необходимый атрибут. Существует хорошая статья о создании с помощью проверки jQuery здесь.

Другой вариант: вы можете ссылаться на проект, например Foolproof validation (codeplex), который предоставляет эту функциональность и клиентские скрипты.

Кроме того, вы можете использовать ajax для загрузки частичных представлений, чтобы они никогда не были на странице при скрытии. Это позволит избежать условной проверки вообще.

Ответ 3

Попробуйте использовать собственный атрибут :

[ConditionalRequired("hFirstName==true")]
public string FirstName {get, set};

Он поддерживает несколько условий.