Ошибка пользовательской проверки не отображается - PullRequest
1 голос
/ 20 мая 2011

У меня есть приложение MVC 3, и я пытаюсь отобразить пользовательскую ошибку проверки.Обычные ошибки проверки, которые генерируются моделью, т.е. Обязательные, отображаются на странице.Теперь я проверяю, существует ли пользователь, и если да, добавив сообщение об ошибке:

if (userExists)
    ModelState.AddModelError("UserName", UserManagementResources.UserAlreadyExistsText);
return View(model);

В представлении у меня есть сводка проверки и Html.ValidationMessage ("UserName"), но ни одно из них не отображаетсяОшибка.Я успешно использовал это на других страницах.Единственное отличие этой страницы в том, что она использует сценарии проверки RequiredIf.http://blogs.msdn.com/b/simonince/archive/2011/02/04/conditional-validation-in-asp-net-mvc-3.aspx

Любые идеи, как решить эту проблему, приветствуются.Спасибо.


Редактировать

Я возвращаю сообщение проверки через удаленную проверку.Если я смотрю, что делает сеть, она возвращает сообщение об ошибке, но оно все равно не отображается в представлении.

[Required]
    [DataType(DataType.EmailAddress)]
    [Remote("IsUserAvailable", "Validation", ErrorMessage = "Ein Benutzer mit dieser Email existiert bereits.")]
    [Display(Name = Resources.EmailText, ResourceType = typeof(Resources))]
    public string Email
    {
        get { return User.Email; }
        set { User.Email = value; }
    }   

Представление:

@Html.LabelFor(u => u.Email, Resources.Email + " (Login) *")
@Html.EditorFor(u => u.Email)
@Html.ValidationMessageFor(u => u.Email)
<br clear="all" />

Удаленный контроллер проверки:

public class ValidationController : Controller
{
    public JsonResult IsUserAvailable(string Email)
    {
        bool userExists;

        using (var userModel = new UserManagementModel())
        {
            userExists = userModel.UserExists(Email);
        }

        if(userExists)
            return Json(UserManagementResources.UserAlreadyExists, JsonRequestBehavior.AllowGet);
        else
            return Json(true, JsonRequestBehavior.AllowGet);
    }

}

Ответы [ 2 ]

3 голосов
/ 20 мая 2011

Почему бы вам не использовать Удаленную проверку для этого?

Зачем отправлять сообщения просто, чтобы проверить, существует ли пользователь?

пример:

public class RegisterModel
{
    [Required]
    [Remote("UserNameExists", "Validation", "", ErrorMessage = "Username is already taken.")]
    [RegularExpression(@"(\S)+", ErrorMessage = "White space is not allowed.")]
    [Display(Name = "Username")]
    public string UserName { get; set; }
}

и создайте контроллер валидации, имеющий метод UserNameExists, такой как

public JsonResult UserNameExists(string UserName)
{
    var user = _db.Users.Where(x => x.username.Equals(UserName));

    return user == null ?
        Json(true, JsonRequestBehavior.AllowGet) :
        Json(string.Format("{0} is not available.", register.UserName), JsonRequestBehavior.AllowGet);
}
1 голос
/ 20 мая 2011

Когда вы изменяете версию вашего jQuery.js, вы должны также изменить файл validation.js. Разные версии несовместимы друг с другом, и при смешивании файлов вы можете увидеть странное поведение в разных браузерах.

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