Проблема с удаленной проверкой в ​​asp.net mvc 3

У меня есть модель человека

public class Person
    {

        public int  ID { get; set; }
        [Required]
        [Remote("UserNameExists", "People", "Username is already taken.")]
        public string Name { get; set; }
        [Required]
        public string LastName { get; set; }



    }

Это мой метод UserNameExists

public JsonResult UserNameExists(string name)
        {
            bool exists = personRepository.GetPersonByName(name.Trim());
            if (!exists)
                return Json(true, JsonRequestBehavior.AllowGet);

            return Json(string.Format("{0} is not avavfddvilable.", name),
                    JsonRequestBehavior.AllowGet);
        }

Когда у меня включен Javascript, он работает нормально, но когда я отключаю javascript, это правило не применяется...

Почему это?

Пожалуйста помоги.

Изменить ожидаемое поведение:

В соответствии с msdn следует соблюдать это правило даже без яваскрипта

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

Когда вы покидаете поле, содержащее недопустимые данные, вы не видите ошибки проверки, поскольку сценарии отключены. Поскольку ASP.NET MVC использует ненавязчивый JavaScript, вы не видите ошибок скрипта на стороне клиента. Однако при отправке формы выполняется проверка на стороне сервера. (Рекомендуется протестировать веб-приложение в браузере, в котором отключены сценарии.)


person nacho10f    schedule 05.05.2011    source источник


Ответы (3)


Вы должны продублировать вызов проверки на сервере - это НЕ работает, как указано в моем тестировании. См. мой пост по адресу: DRY Remote Validation в ASP.NET МВК 3

person Adam Tuliper - MSFT    schedule 05.05.2011
comment
кстати... У меня есть пример проекта для настройки удаленной проверки - см.: completedevelopment.blogspot.com/2011/08/ обратите внимание, что он НЕ ДОПОЛНИТЕЛЬНО проверяет валидацию сообщения, как это предлагается в этой статье, это просто базовая демонстрация. - person Adam Tuliper - MSFT; 22.08.2011

См. мою статью MSDN Практическое руководство. Реализация удаленной проверки в ASP. NET MVC Я использую код проверки удаленного клиента в методе HttpPost Create для проверки серверной части, когда JavaScript отключен.

[HttpPost]
    public ActionResult Create(CreateUserModel model) {

        // Verify user name for clients who have JavaScript disabled
        if (_repository.UserExists(model.UserName)) {
            ModelState.AddModelError("UserName", ValidationController.GetAltName(model.UserName, _repository));
            return View("Create", model);
        }
person RickAndMSFT    schedule 06.05.2011

Похоже, у вас отключен JavaScript, и ваша удаленная проверка не удалась.

Для удаленной проверки требуется, чтобы в браузере был включен JavaScript. Для этого используется jQuery и вызов AJAX.

Цитата из MSDN - это именно то, что вы наблюдаете:

вы не видите ошибку проверки

проверка на стороне сервера выполняется при отправке формы

person p.campbell    schedule 05.05.2011
comment
Значит, мне нужно дублировать код, чтобы сервер также применял это правило? - person nacho10f; 06.05.2011