Как передать пользовательское уведомление о неудачном входе в систему для просмотра в MVC4

Я хочу передать сообщение об ошибке входа в систему, которое я сам кодировал, но не знаю как. Я хочу поместить это в @Html.ValidationMessageFor(model => model.UserName) а также @Html.ValidationMessageFor(model => model.Password) или отдельный ярлык (правильно ли я буду использовать @Html.ValidationMessage() вместо @Html.ValidationMessageFor()?)

вот моя модель:

public class User 
{
    public int UserId { get; set; }

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

    [Required]
    [DataType(DataType.Password)]
    public string Password { get; set; }
}

вот мой контроллер:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Login(User p)
{
    if (ModelState.IsValid)
    {
        User item = db.Authenticate(p);

        if (item != null) // if item is not null, the login succeeded
        {
            return RedirectToAction("Main", "Home");
        }
    }
    string error = "Incorrect user name or password."; //  I don't know how to pass this
    return View(); //login failed
}

вот мой взгляд:

@using (Html.BeginForm()) {
    @Html.AntiForgeryToken()
    @Html.ValidationSummary(true)

    <fieldset>
        <legend>User</legend>

        <div class="editor-label">
            @Html.LabelFor(model => model.UserName)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.UserName)
            @Html.ValidationMessageFor(model => model.UserName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(model => model.Password)
        </div>
        <div class="editor-field">
            @Html.EditorFor(model => model.Password)
            @Html.ValidationMessageFor(model => model.Password)
        </div>

        <p>
            <input type="submit" value="Login" />
        </p>
    </fieldset>
}

2 ответа

Решение

Вы можете добавить пользовательское сообщение об ошибке в словарь состояния модели, используя AddModelError метод. validationSummary /ValidationMessageFor вспомогательные методы читают ошибки проверки из словаря состояний модели при его вызове.

Первый параметр - это ключ для сообщения об ошибке. Если вы пройдете string.empty в качестве значения передаваемое вами сообщение об ошибке будет отображаться ValidationSummary вспомогательный метод

ModelState.AddModelError(string.Empty,"Incorrect user name or password.");
return View(p);

Если вы хотите визуализировать сообщение об ошибке с помощью элемента ввода (ValidationMessageFor рендеринга), вы можете передать имя свойства в качестве значения ключа при вызове AdddModelError метод.

ModelState.AddModelError(nameof(User.Password),"Incorrect password");
return View();

Мы можем использовать метод AddModelError для обработки пользовательских сообщений об ошибках

ModelState.AddModelError(nameof(User.UserName),"Incorrect UserName");
ModelState.AddModelError(nameof(User.Password),"Incorrect password");
return View();
Другие вопросы по тегам