В ASP.NET MVC ModelState может использоваться с обновлением ajax?

Три метода описаны в ссылке ниже. У меня нет производительности, протестировал их для определения, который является самым быстрым.

http://www.blackwasp.co.uk/SQLDateFromDateTime.aspx

9
задан Community 23 May 2017 в 12:34
поделиться

1 ответ

Если я правильно понимаю, что вы пытаетесь сделать, мой первый ответ будет отрицательным, вы не можете использовать текущее состояние модели и запрос Ajax. Возможно, вы можете эмулировать поведение ModelState, чтобы отобразить ошибки:

  1. Передача List > (свойство, сообщение) с помощью JSON (для этого вам потребуется передать форму modelErrors modelState в новую структуру) и выполнить HTML-конструкцию сводки проверки с помощью JS / jQuery (что, как мне кажется, излишне убивающее решение).

  2. Если вы собираетесь на сервер и есть какие-либо ошибки, просто выполните рендеринг частично из Html.ValidationSummary () , передайте его через JSON и добавьте в форму. Если все в порядке, просто верните представление PartialDetails и замените фактическое содержимое. Для этого потребуется какой-то параметр статуса, чтобы вы знали, что возвращается с сервера при обратном вызове ajax.

РЕДАКТИРОВАТЬ: этот последний вариант звучит хорошо, но сложно, Использование JSON

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit(int id, FormCollection formValues)
        {
            Dinner dinner = dinnerRepository.GetDinner(id);
            try
            {
                UpdateModel(dinner);
                dinnerRepository.Save();
                return Json(new 
                {
                    result = "success",
                    html = this.RenderToString("PartialDetails", dinner) 
                });

            }
            catch
            {
                foreach (var issue in dinner.GetRuleViolations())
                {
                    ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                }
                return Json(new
                {
                    result = "failed",
                    html = this.RenderToString("PartialEdit", dinner)
                });
            }
        }

Здесь параметр результата позволит вам узнать, какое действие следует выполнять в каждом случае, просто нужно проверить его в обратном вызове.

4
ответ дан 4 December 2019 в 23:39
поделиться
Другие вопросы по тегам:

Похожие вопросы: