Почему «Запомнить меня» требуется

Работа на странице входа ASP.NET MVC. Я использую виджеты DevExtreme. Когда я ввожу имя пользователя/пароль и нажимаю кнопку «Войти», элементы управления переходят к действию «Войти», и я вижу, что ModelState.IsValid это false,

Причина в том, что ModelState показывает ошибку:

Запомнить меня? Поле, обязательное для заполнения.

Я проверил свою ViewModel и вижу, что она не пометила поле как требуется. Странно то, что когда я нажимаю кнопку «Войти» во второй раз, она работает, и ModelState.IsValid имеет значение true!!

Это мой режим просмотра

public class LoginViewModel
{
    [Required]
    [Display(Name = "Email")]
    [EmailAddress]
    public string Email { get; set; }

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

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

Вопрос в том, зачем это нужно и почему срабатывает по второму клику.

Это код на мой взгляд

@Html.DevExtreme().CheckBoxFor(m => m.RememberMe).Text(Html.DisplayNameFor(m => m.RememberMe).ToString())

Это код в исходнике html

<div id="devextreme2"></div>
<script>
    jQuery(function($){
        $("#devextreme2").dxCheckBox({
            "name": "RememberMe",
            "value": null, 
            "text":"Remember me?",
            "inputAttr": {"id":"RememberMe"}
        });
    });
</script>

person FLICKER    schedule 17.12.2017    source источник
comment
Единственная причина, по которой это может произойти, заключается в том, что у вас есть ввод в вашей форме с name="RememberMe", но вы установили для него значение null (или значение, отличное от true или false). И всегда требуется bool (это не может быть null)   -  person    schedule 17.12.2017
comment
Вы правы, флажок инициализирован нулем, я добавил конструктор в свой ViewMode и инициализировал поле ложным, но все же в Html я вижу, что начальное значение равно нулю. Это проблема. спасибо за подсказку   -  person FLICKER    schedule 17.12.2017
comment
Я не экстрасенс :) - покажи свой код.   -  person    schedule 17.12.2017
comment
я добавил немного кода   -  person FLICKER    schedule 17.12.2017
comment
Я не знаю, как инициализировать его значение на странице Razor.   -  person FLICKER    schedule 17.12.2017
comment
Я не знаком с виджетами DevExtreme, но предполагаю, что проблема может заключаться в вашей настройке "value": null,.   -  person    schedule 17.12.2017
comment
Давайте продолжим обсуждение в чате.   -  person    schedule 17.12.2017
comment
Да, это так. Я думаю, что я должен написать какой-нибудь javascript для инициализации этого. однако я не знаю, почему он устанавливает значение null, в то время как для моего m.RememberMe установлено значение false !!   -  person FLICKER    schedule 17.12.2017


Ответы (1)


Всегда требуется свойство bool (оно не может быть null, если оно не bool?).

Если вы специально не установили свойство .Value() метода DevExtreme CheckBoxFor(), он инициализируется с помощью value="null" in the hidden input that is generated by the plugin. Если вы не нажмете на флажок, то null будет опубликовано и в результате ModelState будет действительным.

Предполагая, что вы передаете экземпляр LoginViewModel в представление в методе GET, вы можете установить значение по умолчанию, используя

@Html.DevExtreme().CheckBoxFor(m => m.RememberMe)
    .Value(Model.RememberMe)
    .Text(Html.DisplayNameFor(m => m.RememberMe).ToString())
person Community    schedule 17.12.2017