Ajax.BeginForm + ModelState.AddModelError + ValidationSummary: невозможно отобразить ошибку.Зачем? - PullRequest
0 голосов
/ 18 мая 2018

Я следую другому посту здесь на SO по этой теме, но я действительно не могу понять, как показать ошибку проверки в MVC, используя Ajax.Я делаю (используя Ajax.BeginForm):

@using (Ajax.BeginForm("Login", "Account",
    new AjaxOptions
    {
        HttpMethod = "POST",
        UpdateTargetId = "body",
        InsertionMode = InsertionMode.Replace,
        LoadingElementId = "loadingOverlay",
        OnComplete = "AjaxBeginFormOnComplete",
        OnSuccess = "AjaxBeginFormOnSuccess",
        OnFailure = "AjaxBeginFormOnFailure"
    }))
{
    @Html.AntiForgeryToken()

    @Html.ValidationSummary(true)
    @Html.ValidationMessageFor(m => m.ErrorNotLogged);

    <div class="row">
        <div class="col-5 mx-auto">
            <div class="card">
                // input data and such
            </div>
        </div>
    </div>
}

На контроллере я добавляю ModelState.AddModelError:

public ActionResult Login(LoginViewModel model)
{
    ModelState.AddModelError("ErrorNotLogged", "Error Message");

    return PartialView(model);
}

Вот ViewMmodel:

public class LoginViewModel
{
    [Display(Name = "Email", ResourceType = typeof(Resources.Customs))]
    [Required(ErrorMessageResourceType = typeof(Resources.Customs), ErrorMessageResourceName = "RequiredEmail")]
    [EmailAddress(ErrorMessageResourceType = typeof(Resources.Customs), ErrorMessageResourceName = "InvalidEmail")]
    public string Email { get; set; }

    [Display(Name = "Password", ResourceType = typeof(Resources.Customs))]
    [DataType(DataType.Password)]
    [Required(ErrorMessageResourceType = typeof(Resources.Customs), ErrorMessageResourceName = "RequiredPassword")]
    public string Password { get; set; }

    [Display(Name = "KeepMeLoggedIn", ResourceType = typeof(Resources.Customs))]
    public bool KeepMeLoggedIn { get; set; }

    public string ErrorNotLogged { get; set; }
}

Итак, мне нужно отобразить (после AJAX-запроса) (список) ошибок, сгенерированных с помощью AddModelError.

Это делает правильный Ajax-вызов.Но когда ответ завершен, я не вижу ни возвращенной ошибки, ни HTML, ничего!Где я не прав?

Пробовал разные аспекты, но ничего не работает:

@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@Html.ValidationSummary(false)

ModelState.AddModelError("", "Error Message");
return PartialView("Login", model);

[Required]
public string ErrorNotLogged { get; set; }

Должен ли я вызывать некоторую функцию JS на стороне клиента?Я все еще не вижу html, возвращенный с диапазоном и сообщением об ошибке, в любом случае ...

1 Ответ

0 голосов
/ 18 мая 2018

Вы должны положить свои свойства в бритву.Попробуйте использовать @Html.EditorFor или @Html.TextBoxFor, например:

@Html.ValidationSummary(true)
@Html.ValidationMessageFor(m => m.ErrorNotLogged);

<div class="row">
    <div class="col-5 mx-auto">
        <div class="card">
            @Html.TextBoxFor(model => model.Email)
            @Html.ValidationMessageFor(model => model.Email)
        </div>
    </div>
</div>

Попробуйте какой:

  1. удалить де AjaxOptions (OnComplete, OnSuccess, OnFailure). ИЛИ
  2. после того, как AjaxOptions присваивает ID форме (..., new AjaxOptions { }, new { @id = "MyID") при запуске консоли браузера: $('#MyID').valid(); $('#MyID').validate().errorList (вернет ошибки - просто для проверки правильности проверки). ИЛИ

Для получения дополнительной информации смотрите @ https://docs.microsoft.com/en-us/aspnet/mvc/overview/getting-started/introduction/adding-validation

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