Я создал пользовательскую аннотацию данных, чтобы выполнить некоторую проверку на моей модели представления. Проблема в том, что она не проверяется на стороне клиента. Здесь моя модель:
public class MemberViewModel
{
[ScaffoldColumn(false)]
public int MemberId { get; set; }
[Required(ErrorMessage = "Name is required")]
public string Name { get; set; }
//My custom data annotation
[EnforceTrue(ErrorMessage = "You must agree to the Terms and Conditions")]
public bool AgreeTerms { get; set; }
}
Код проверки аннотации данных:
public class EnforceTrueAttribute : ValidationAttribute, IClientValidatable
{
public EnforceTrueAttribute() { }
public override bool IsValid(object value)
{
return value != null && (bool)value == true;
}
public IEnumerable<ModelClientValidationRule> GetClientValidationRules(ModelMetadata metadata, ControllerContext context)
{
yield return new ModelClientValidationRule() { ValidationType = "enforcetrue", ErrorMessage = this.ErrorMessageString };
}
}
Мой метод управления:
[HttpPost]
public ActionResult Index(MemberViewModel viewModel)
{
Member member = new Member();
TryUpdateModel(member);
if (ModelState.IsValid)
{
_membersRepository.SaveMember(member);
return RedirectToAction("Index", "Home");
}
return View(viewModel); // validation error, so redisplay same view
}
И мое мнение:
@using (Html.BeginForm("Index", "Members", FormMethod.Post)) {
@Html.HiddenFor(m => m.MemberId)
<div class="editor-label">@Html.LabelFor(model => model.Name)</div>
<div class="editor-field">@Html.TextBoxFor(model => model.Name)</div>
<div class="editor-field">@Html.CheckBoxFor(model => model.AgreeTerms) <label for="AgreeTerms">I agree to the Terms and Conditions</label></div>
<p>
<input type="submit" value="Submit" />
</p>
@Html.ValidationSummary()
}
Итак, все мои другие сообщения об ошибках отображаются в сводке проверки с проверкой на стороне клиента. Но для моей аннотации пользовательских данных сообщение об ошибке не отображается до тех пор, пока остальная модель не будет действительной, и после отправки формы и перезагрузки страницы, когда ошибка отображается в сводке.
Есть ли что-то еще, что мне нужно сделать, чтобы он появился в сводке с другими ошибками?
Я использую С# и ASP.NET MVC 3