Как скрыть окно предупреждения, когда проверка выполняется на стороне сервера с аннотацией данных при загрузке страницы - PullRequest
1 голос
/ 01 июля 2019

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

 [Required(ErrorMessage = "password needed")]
    public string password { get; set; }
    [Required(ErrorMessage = "user name needed")]
    public string username{ get; set; }

В контроллере, который я тестирую, с жестко закодированными значениямикак показано ниже:

 public ActionResult Login2(Login login)
    {
        string username = login.username;    
        string password = login.password;
        if (ModelState.IsValid)
        {              
            if (username == "100000" && password == "password")
            {
                return RedirectToAction("Index", "Home");
            }               
           else{
           return View();
           }
        }
        return View();

В viwe я подтверждаю сообщением проверки, как показано ниже:

         <label class="form-label" for="contactPhone">
                          username
                        </label>
                        @Html.EditorFor(model => model.CVR, new { 
           htmlAttributes = new { @class = "form-input", PlaceHolder = 
               "username", maxlength = "10", Type="HtmlInputFile", 
                    id="username" , value=""} })
                        <br>
                        @Html.ValidationMessageFor(model => 
                  model.username, "", new { @class = "alert alert-error" })

                        <label class="form-label" for="contactPhone">
                            p<ssword
                        </label>
                        @Html.EditorFor(model => model.password, 
          "Password", new { htmlAttributes = new { @class = "form- 
           input", PlaceHolder = "password" } })
                        <br>
                        @Html.ValidationMessageFor(model => 
               model.password, "", new { @class = "alert alert-error" })
                    <button class="button button-primary button-active" 
                   id="danger" type="submit">Login</button>

Проблема заключается в том, что окно загрузки отображается на странице загрузки (пусто).После того, как кнопка отправки не заполняется, отображается сообщение об ошибкеМои вопросы таковы: 1 - как скрыть красное окно предупреждения при загрузке страницы входа?2 - как добавить больше ограничений для проверки имени пользователя и пароля.например:

  1. как проверить правильный пароль?и отобразить сообщение об ошибке в окне предупреждения?
  2. как проверить правильность имени пользователя? и отобразить ошибку в окне предупреждения?

1 Ответ

2 голосов
/ 01 июля 2019

Стандартный способ сделать это в MVC - добавить все ваши проверки в вашу модель:

public class LoginViewModel
{
    [Required(ErrorMessage = "password needed")]
    public string Email { get; set; }

    [Required(ErrorMessage = "user name needed")]
    public string Password { get; set; }
}

Затем в вашем контроллере вы проверите, если модель действительна:

public ActionResult Login2(LoginViewModel model, string returnUrl)
{
    if (!ModelState.IsValid)
    {
        return View(model); // <-- return invalid model to the same view (Login2) so  user can fix it        
    }

    // code for valid model...
}

И отобразить сообщение об ошибке в виде:

@using (Html.BeginForm("Login2", "Account", FormMethod.Post, new { role = "form" }))
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true, "", new { @class = "text-danger" })
    <div class="form login-form">
        <div class="form-group">
            @Html.LabelFor(m => m.username, new { @class = "" })
            @Html.TextBoxFor(m => m.username, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.username, "", new { @class = "text-danger" })
        </div>

        <div class="form-group">
            @Html.LabelFor(m => m.password, new { @class = "" })
            Html.PasswordFor(m => m.password, new { @class = "form-control" })
            @Html.ValidationMessageFor(m => m.password, "", new { @class = "text-danger" })
        </div>
    </div>
}

См. этот ответ для настройки правил проверки пароля.

...