ModelState.IsValid имеет значение true, если пароль представляет собой пустую строку.

Я передаю модель входа в метод входа по умолчанию mvc4

[HttpPost]
    [AllowAnonymous]
    [ValidateAntiForgeryToken]
    public ActionResult Login(LoginModel model, string returnUrl)
    {
        if (ModelState.IsValid && _webSecurity.login(model))
        {
            return RedirectToLocal(returnUrl);
        }

        // If we got this far, something failed, redisplay form
        ModelState.AddModelError("", "The user name or password provided is incorrect.");
        return View(model);
    }

Моя модель выглядит следующим образом

var _loginModel = new LoginModel
        {
            UserName = [email protected],
            Password = ""
        };

но ModelState.IsValid возвращает true . Я не знаю почему. Помоги мне

Заранее спасибо .

Изменить

Вот мой LoginModel

 public class LoginModel
{
    [Required]
    [Display(Name = "User name")]
    public string UserName { get; set; }

    [Required]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

    [Display(Name = "Remember me?")]
    public bool RememberMe { get; set; }
}

person Ancient    schedule 18.06.2013    source источник
comment
Можете ли вы опубликовать определение класса LoginModel?   -  person Satpal    schedule 18.06.2013
comment
попробуйте это [Обязательно (AllowEmptyStrings = false)]   -  person Amit    schedule 18.06.2013
comment
@Amit нет, все тот же результат.   -  person Ancient    schedule 18.06.2013
comment
попробуйте TryValidateModel(model) один раз, опубликуйте также код просмотра   -  person Satpal    schedule 18.06.2013


Ответы (1)


Атрибут проверки, определенный в модели, будет применяться во время привязки модели, вам не нужно делать это вручную.

    [Required]
    [StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.",MinimumLength = 6)]
    [DataType(DataType.Password)]
    [Display(Name = "Password")]
    public string Password { get; set; }

Для более сложной проверки вы также можете добавить фильтр регулярных выражений следующим образом:

    [RegularExpression(@"^[^\<\>]*$", ErrorMessage = "May not contain <,>")]

Это будет соответствовать фильтру паролей групповой политики Windows, например:

    (?=^.{6,255}$)((?=.*\d)(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[^A-Za-z0-9])(?=.*[a-z])|(?=.*[^A-Za-z0-9])(?=.*[A-Z])(?=.*[a-z])|(?=.*\d)(?=.*[A-Z])(?=.*[^A-Za-z0-9]))^.*
person Community    schedule 18.06.2013
comment
усложнится, как только вы захотите применить сложную пользовательскую логику к полям модели (запретить определенные специальные символы или принудительно использовать числа, специальные символы и другой регистр), но в этом случае это должно работать - person Vogel612; 18.06.2013