Как использовать MVC ValidationMessageFor в диалоге начальной загрузки - PullRequest
0 голосов
/ 01 ноября 2018

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

Это мой логин с Html.BeginForm

<div class="col-xs-2 login-btn">
            <a class="btn pfologin" data-toggle="modal" data-target=".bootstrapmodal">
                <span> LOGIN</span>
            </a>

            <!-- Modal dialog -->
            <div class="modal fade bootstrapmodal">
                <div class="modal-dialog">
                    @using (Html.BeginForm("Login", "Account"))
                    {
                        <div class="modal-content modal-pfo">
                            <div class="modal-body">
                                <p>
                                    User:<br />
                                    @Html.TextBoxFor(s => s.Name, new { @class = "form-control" })
                                    @Html.ValidationMessageFor(s => s.Password, "", new { @class = "text-danger" })
                                </p>
                                <p>
                                    Password:<br />
                                    @Html.TextBoxFor(s => s.Password, new { @class = "form-control" })
                                    @Html.ValidationMessageFor(s => s.Password, "", new { @class = "text-danger" })
                                </p>
                                <p style="display: flex;">
                                    @Html.CheckBoxFor(s => s.Privacy, new { @class = "checkbox" }) &nbsp;&nbsp;&nbsp;Remember me
                                </p>
                            </div>
                            <div class="modal-footer">
                                <button data-dismiss="modal" class="btn btn-pfo">Cancel</button>
                                <input type="submit" value="Login" class="btn btn-pfo" />
                            </div>
                        </div>
                    }
                </div>
        </div>...

это модель

public class LoginModel
{
    [Required(ErrorMessage = "Username requested")]
    public string Name { get; set; }

    [Required(ErrorMessage = "Password requested")]
    [DataType(DataType.Password)]
    public string Password { get; set; }
    public bool Privacy { get; set; }
}

а это контроллер

[HttpPost]
public async Task<ActionResult> Login(LoginModel loginModel)
{
    if (String.IsNullOrEmpty(loginModel.Name))
    {
        return ModelState.AddModelError("Name", loginModel.Name);
    }
    if (String.IsNullOrEmpty(loginModel.Password))
    {
        ModelState.AddModelError("Password", loginModel.Password);
    }

    if (ModelState.IsValid)
    {

    }
    return RedirectToAction("Index", "Home");
}

да, я перенаправляю из логина / поста в индекс, но не думаю, что это проблема ... спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Когда вы возвращаете RedirectToAction, вы теряете все данные формы (и, следовательно, всю информацию для проверки). Вместо перенаправления на Index верните View с моделью, которая была передана.

Во-вторых, поскольку оба свойства помечены как обязательные, вам не нужно явно проверять, являются ли они нулевыми или пустыми. Модель уже проверена до того, как достигнет вашего [HttpPost] метода, основанного на атрибутах, которые вы задали для модели. Если вы вернете вид с этой моделью, появятся ваши сообщения проверки. Это самая базовая реализация, но вы, вероятно, можете обойтись без:

[HttpPost]
public async Task<ActionResult> Login(LoginModel loginModel)
{
    if (ModelState.IsValid)
    {
        // Do work
        return RedirectToAction("Index", "Home");
    }
    // Else, if not valid, re-render the view with the updated information and display it to the user
    return View(loginModel);
}

Подробнее о проверке здесь

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