Проблем с дистанционно валидиране в 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 трябва да спазва това правило дори без Javacript

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

Докато напускате полето, което съдържа невалидните данни, не виждате грешка при проверката, защото скриптовете са деактивирани. Тъй като ASP.NET MVC използва ненатрапчив JavaScript, не виждате грешки в скрипта от страна на клиента. Въпреки това валидирането от страна на сървъра се извършва, когато изпратите формуляра. (Добра практика е да тествате вашето уеб приложение с браузър, в който скриптовете са деактивирани.)


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


Отговори (3)


Трябва да дублирате обаждане за валидиране на сървъра - това НЕ работи, както е описано според моите тестове. Вижте публикацията ми на адрес: DRY Remote Validation в ASP.NET MVC 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