2015-06-08 2 views
2

У меня есть ViewModel как это:использование проверки атрибутов на нескольких флажок в ASP.NET MVC приложения

public UserViewModel 
{ 
    public bool IsBlue { get; set; } 
    public bool IsRed { get; set; } 
} 

и связанный с ним вид бритвы, как это:

<td> 
    <label for="IsBlue"> 
     <span>is blue ?</span> 
    </label> 
</td> 
<td> 
    <span>@Html.CheckBoxFor(d => d.IsBlue)</span> 
</td> 
<td> 
    <label for="IsRed"> 
     <span>is red ?</span> 
    </label> 
</td> 
<td> 
    <span>@Html.CheckBoxFor(d => d.IsRed)</span> 
</td> 

У меня есть задача о сторона проверки сервера:

Пользователь может проверить первый, второй или оба текстовых поля. Мой вопрос в том, как я могу использовать System.ComponentModel.DataAnnotations , чтобы установить хотя бы один флажок. Мне было интересно, если бы был атрибут, необходимый для использования в двух свойствах.

Заранее за вашу помощь.

+1

Там нет ничего из коробки, которая будет делать это. Вам нужно будет написать свою собственную проверку. –

+0

В этом случае, как я могу отобразить сообщение об ошибке, отображаемое, как в другом атрибуте проверки, из моего метода проверки. – user2443476

+0

Самый простой был бы в методе POST, если оба являются «ложными», Ошибка ModelState' - 'ModelState.AddModelError (« "," Вы должны выбрать хотя бы один ")' и вернуть представление. Ошибка будет отображаться в '@ Html.ValidationSummary()' –

ответ

1

Вы можете использовать Fluent Validation

[FluentValidation.Attributes.Validator(typeof(CustomValidator))] 
public UserViewModel 
{ 
    public bool IsBlue { get; set; } 
    public bool IsRed { get; set; } 
} 

public class CustomValidator : AbstractValidator<UserViewModel> 
{ 
    public CustomValidator() 
    { 
    RuleFor(x => x.IsBlue).NotEqual(false) 
     .When(t => t.IsRed.Equals(false)) 
     .WithMessage("You need to select one"); 
    } 
} 
2

Вы можете создать свою собственную проверку Cutom, как показано ниже с помощью JQuery: -

$("#form").validate({ 
    rules: { 
     checkbox: { 
     required: 'input[type="checkbox"]:checked', 
     minlength: $('input[type="checkbox"]').length(); 
     } 
    }, 
    messages: { 
     checkbox: "Please check at least one checkbox.", 
    } 
}); 
Смежные вопросы