Требовать проверки, только если поле видно - PullRequest
21 голосов
/ 20 апреля 2011

Я использую атрибут [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)" });

Ответы [ 4 ]

14 голосов
/ 21 апреля 2011

С некоторыми полезными советами от @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 за его ответ

7 голосов
/ 20 апреля 2011

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

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

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

1 голос
/ 16 ноября 2013

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

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

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

0 голосов
/ 16 мая 2018

Немного поздно,

namespace System.ComponentModel.DataAnnotations
{
    public class RequiredIfVisibleAttribute : RequiredAttribute
    {
        protected override ValidationResult IsValid(object value, ValidationContext context)
        {
            if (HttpContext.Current.Request.Form.AllKeys.Contains(context.MemberName))
                return base.IsValid(value, context);

            return ValidationResult.Success;
        }
    }
}

Но вот мое решение.

Просто наследование Required, которое будет действовать так же, за исключением того, что оно будет активировано только если поле, если оно включенов выложенных ключах.

...