Проверка аннотации пользовательских данных на стороне клиента

Я создал специальную аннотацию данных, чтобы выполнить некоторую проверку моей модели представления. Проблема в том, что он не проверяется на стороне клиента. Вот моя модель:

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()
}

Таким образом, все мои другие сообщения об ошибках отображаются в сводке проверки с проверкой на стороне клиента. Но для моей аннотации пользовательских данных сообщение об ошибке не отображается до тех пор, пока остальная часть модели не станет действительной, и после того, как вы отправите форму и перезагрузите страницу, именно тогда ошибка отображается в сводке.

Есть ли что-то еще Мне нужно сделать здесь, чтобы он отображался в сводке с другими ошибками?

Я использую C # и ASP.NET MVC 3

6
задан Steven 8 August 2011 в 19:29
поделиться