Удаленная проверка с ASP.NET MVC2 и jQuery - PullRequest
0 голосов
/ 13 ноября 2010

Я пытаюсь внедрить проверку удаленного клиента, чтобы проверить, было ли имя пользователя уже занято. Я прочитал сообщение Фила Хака и статью msdn и пришел к следующей реализации:

   public class RemoteAttribute : ValidationAttribute
    {
        public string Action { get; set; }
        public string Controller { get; set; }

        public override bool IsValid(object value)
        {
            return true;
        }
    }


public class RemoteValidator : DataAnnotationsModelValidator<RemoteAttribute>
{

    public RemoteValidator(ModelMetadata metadata, ControllerContext context, RemoteAttribute validationAttribute) :
        base(metadata, context, validationAttribute)
    {
    }

    public override IEnumerable<ModelClientValidationRule> GetClientValidationRules()
    {
        var rule = new ModelClientValidationRule
                                             {
            ErrorMessage = Messages.DuplicateUsername,
            ValidationType = "remote"
        };

        rule.ValidationParameters.Add("url", Attribute.Controller + "/" + Attribute.Action);
        return new[] { rule };
    }
}

Класс модели моего представления имеет удаленный атрибут следующим образом:

   [Remote(Controller = "SignUp",Action = "IsUsernameAvailable")]
   public string Username { get; set; }

Я использую проверку jquery следующим образом:

jQuery.validator.addMethod("remote", function (value, element, params) {
    if (this.optional(element)) {
        return true;
    }

    if (value != '') {
        $.post(params.url, { username: value }, function (response) {
            return response;
        });
    }

});

В моем контроллере у меня есть несколько методов действий:

  public JsonResult IsUsernameAvailable(string userName)
    {
        var isUsernameAvailable = _userService.IsUsernameAvailable(userName);
        if (isUsernameAvailable)
        {
            return Json(true);
        }

        return Json(false);
    }

По какой-то причине, даже если мой метод actiom IsUsernameAvailable возвращает true, сообщение проверки всегда отображается. Что я здесь не так делаю?

Ответы [ 3 ]

0 голосов
/ 29 ноября 2010

Попробуйте отправить строку "true" и "false" вместо значений json с

return Content("true") 

и

return Content("false");
0 голосов
/ 01 апреля 2011

попробовать Json (true, JsonRequestBehavior.AllowGet);или Json (false, JsonRequestBehavior.AllowGet);

0 голосов
/ 14 ноября 2010

Ваш вызов RemoteAttribute.IsValid () всегда возвращает true. Добавьте проверку IsUsernameAvailable и при необходимости верните true или false.

Функция IsValid () сообщает модели, инициировать ли ошибку или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...