Как обрабатывать логические / флажки в ASP.NET MVC 2 с помощью DataAnnotations? - PullRequest
46 голосов
/ 11 февраля 2010

У меня есть модель вида, подобная этой:

public class SignUpViewModel
{
    [Required(ErrorMessage = "Bitte lesen und akzeptieren Sie die AGB.")]
    [DisplayName("Ich habe die AGB gelesen und akzeptiere diese.")]
    public bool AgreesWithTerms { get; set; }
}

Код разметки вида:

<%= Html.CheckBoxFor(m => m.AgreesWithTerms) %>
<%= Html.LabelFor(m => m.AgreesWithTerms)%>

Результат:

Проверка не выполнена. Пока это нормально, потому что bool является типом значения и никогда не является нулевым. Но даже если я сделаю AgreesWithTerms обнуляемым, он не будет работать, потому что компилятор кричит

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

Итак, как правильно справиться с этим?

Ответы [ 12 ]

1 голос
/ 07 мая 2015

Достаточно добавить [RegularExpression]:

[DisplayName("I accept terms and conditions")]
[RegularExpression("True", ErrorMessage = "You must accept the terms and conditions")]
public bool AgreesWithTerms { get; set; }

Примечание - «True» должно начинаться с заглавной буквы T

1 голос
/ 10 октября 2012

Здесь найдено более полное решение (проверка на стороне сервера и клиента):

http://blog.degree.no/2012/03/validation-of-required-checkbox-in-asp-net-mvc/#comments

...