После HttpPost, возвращающего представление (ActionResult), когда модель недопустима, ответ имеет тип содержимого application / json - PullRequest
0 голосов
/ 16 июля 2010

Я сталкиваюсь со странной проблемой на нескольких страницах моего сайта ASP.NET MVC. Когда я отправляю форму и модель НЕ действительна, я пытаюсь вернуть то же представление, чтобы увидеть ошибки - однако вместо перезагрузки страницы появляется всплывающее окно загрузки, в котором говорится, что файл в формате "application / json". Как видно из приведенного ниже кода, метод контроллера возвращает ActionResult, а НЕ JsonResult:

[HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl)
    {
        var isValid = IsUserAuthenticated(model);
        if (isValid)
        {
            if (!String.IsNullOrEmpty(returnUrl))
            {
                return Redirect(returnUrl);
            }
            else
            {
                return User.IsInRole("Administrator")
                           ? RedirectToAction("Index", "Admin")
                           : RedirectToAction("Index", "Home");
            }
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

Когда я отправляю свою форму, не заполняя ее, я вижу, что Модель не проходит проверку (правильно), но когда она достигает последней строки, "return View (model);" - он возвращает весь HTML, который я ожидаю, - но тип контента установлен на «application / json». Я нигде не устанавливаю тип содержимого в своем коде - поэтому я не могу понять, почему это происходит. То же самое происходит и на других страницах, поэтому я думаю, что есть кое-что фундаментальное, что я делаю неправильно, но я не могу понять это.

Есть мысли?

1 Ответ

0 голосов
/ 29 июля 2010

Я наконец выяснил проблему ... это была ошибка, введенная мной, мне стыдно говорить.Однако сделать ошибку очень легко, поэтому я хотел задокументировать проблему здесь на случай, если кто-то еще столкнется с ней.Все это было вызвано из-за вызова «Html.RenderAction (..)», который я использовал на странице «Site.Master».Это действие возвращает JsonResult - и если в исходном сообщении, которое я пытался сделать, обнаружены ошибки, - то действие, которое возвращает JsonResult, также будет выполнено, как только будет загружена главная страница - таким образом, возникает эта проблема.в итоге удалил вызов Html.RenderAction (...) - и просто жестко закодировал нужный мне HTML.

Надеюсь, что поможет

...