我在ASP.NET MVC网站的多个页面中遇到了一个奇怪的问题。当我发布表单并且模型无效时,我尝试返回相同的视图,以便我可以看到错误 - 但是,不是重新加载页面,我得到一个弹出下载框,说明文件是在“application / json”格式中。从下面的代码中可以看出,controller方法返回一个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);
}
当我提交表单而不填写表格时,我可以看到模型未通过验证(正确),但当它到达最后一行时“返回视图(模型);” - 它返回我期望的所有HTML - 但内容类型设置为“application / json”。我没有在我的代码中的任何地方设置内容类型 - 所以我无法弄清楚为什么会发生这种情况。同样的事情也发生在其他页面上,所以我认为我做错了一些基本的事情 - 但我似乎无法弄明白。
有什么想法吗?
答案 0 :(得分:0)
我终于找到了问题......这是我引入的一个错误,我很尴尬地说。但是,这是一个非常容易犯的错误,所以我想在这里记录这个问题以防其他人遇到它。这都是由于我在“Site.Master”页面上使用的“Html.RenderAction(..)”调用引起的。该操作返回一个JsonResult - 如果我试图做的原始帖子遇到错误 - 那么返回JsonResult的操作也会在主页加载后立即执行 - 从而导致此问题。
我最终删除了“Html.RenderAction(...)”调用 - 并且只是对我需要的HTML进行了硬编码。
希望有所帮助