0

我在我的 ASP.NET MVC 站点的多个页面中遇到了一个奇怪的问题。当我发布表单并且模型无效时,我尝试返回相同的视图以便我可以看到错误 - 但是,我没有重新加载页面,而是弹出一个下载框,显示该文件是以“应用程序/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”。我没有在我的代码中的任何地方设置内容类型 - 所以我无法弄清楚为什么会发生这种情况。同样的事情也发生在其他页面上,所以我认为我做错了一些基本的事情 - 但我似乎无法弄清楚。

有什么想法吗?

4

1 回答 1

0

我终于弄清楚了这个问题......这是我引入的一个错误,我很尴尬地说。然而,这是一个非常容易犯的错误,所以我想在这里记录这个问题,以防其他人遇到它。这一切都是由于我在“Site.Master”页面上使用的“Html.RenderAction(..)”调用引起的。该操作返回一个 JsonResult - 如果我尝试执行的原始帖子遇到错误 - 那么返回 JsonResult 的操作也将在加载母版页后立即执行 - 从而导致此问题。

我最终删除了“Html.RenderAction(...)”调用 - 并且只是硬编码了我需要的 HTML。

希望有帮助

于 2010-07-29T17:49:03.023 回答