asp.net MVC 2 на стороне клиента отсутствует проверка ValidationRules для пользовательского атрибута - PullRequest
0 голосов
/ 01 сентября 2010

Не получается получить флажок для проверки на стороне клиента с помощью asp.net mvc 2. Вот мой код.

Модель

[Serializable]
public class RegistrationModel
{
    bool termsAndCondition = false;
    [RequiredToBeTrue(ErrorMessage = "Need terms and service")]
    public bool TermsAndConditions
    {
        get
        {
            return termsAndCondition;
        }
        set
        {
            termsAndCondition = value;
        }
    }
}

Настраиваемый атрибут

public class RequiredToBeTrueAttribute : RequiredAttribute
{
    public override bool IsValid(object value)
    {
        return (value != null) && (value is bool) ? (bool)value : false;
    }
}

Просмотр

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" 
Inherits="System.Web.Mvc.ViewPage<RegistrationModel>" %>

 <% Html.EnableClientValidation(); %>
 <% using (Html.BeginForm("Register", "Registration", new { area="Account", id = "openid_form", inRegistration = true }))
 <%=Html.ValidationSummary(false)  %>
 blah blah blah
 <div class="checkbox"><label><%= Html.CheckBoxFor(model => model.TermsAndConditions) %>I agree to the <a href="content/terms-conditions.html" id="terms-contents">terms and conditions</a> of use.</label></div>
 <input type="submit" id="submit" name="submit" value="Join Now" />
 <%
    Html.ValidateFor(m => m.TermsAndConditions);            
 %>
 <% } %>      

В конце я пытаюсь вызвать Html.ValidateFor, чтобы выдвинуть все сообщения об ошибках вверху страницы.Однако свойство "TermsAndConditions" не проверяется на стороне клиента (прекрасно работает на стороне сервера).Это побуждает меня взглянуть на метод window.mvcClientValidationMetData при этом выталкивании mvc, и я увидел следующее:

{"FieldName":"TermsAndConditions","ReplaceValidationMessageContents":false,"ValidationMessageId":null,"ValidationRules":[]}

Что вы видите, что «ValidationRules» пустые, что означает, что он пытается его проверитьно сообщение об ошибке по какой-то причине не было отправлено клиенту.

Есть идеи?Любая помощь приветствуется.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2010

Эта статья Фила Хаака, Пользовательская проверка ASP.NET MVC 2 , должна помочь вам в правильном направлении.

По сути, вам нужно создать свой собственный DataAnnotationsModelValidator<RequiredToBeTrueAttribute>, а затем написать некоторый клиентский скрипт, чтобы сделать это.

HTHS
Charles

0 голосов
/ 01 сентября 2010

Похоже, мне сначала нужно больше копать. Была надежда, что новый атрибут появится волшебным образом на стороне клиента. Вместо этого нужно написать клиентский javascript, чтобы подключить его. См. пост Фила Хака для подробностей.

...