我正在尝试使用此处描述的“标准”MVC.Net 不显眼的 JavaScript AJAX 模式:
http://bradwilson.typepad.com/blog/2010/10/mvc3-unobtrusive-ajax.html
更具体地说,该模式可能如下所示:
//在视图中
@using (Ajax.BeginForm("action1", "controller1",
null,
new AjaxOptions()
{
HttpMethod = "POST",
OnSuccess = "successHandler",
},
new { id = "formId" }
))
{
@Html.TextBoxFor(m => m.ModelItem)
<input type="submit" value="Go" />
}
我相信我已经在 Web.Config 中设置了必要的元素,以及似乎正在运行的 jQuery 代码。控制器上的“action1”方法被设置为返回一个 JsonResult,可能是这样的:
//在响应的 CONTROLLER 中(并且在这里使用不重要的 MODEL)
public JsonResult action1(MyModel model)
{
if (ModelState.IsValid)
{
return Json(new { statusCode = 1 });
}
return Json(new { statusCode = 0 });
}
当我使用“现代”浏览器时,这种模式效果很好;也就是来自三大厂商的最新版本。但是,当我尝试使用 Internet Explorer 8(可能是之前)执行任何操作时,我会收到一个“文件下载 - 安全警告”对话框。我相信弹出这个对话框是因为浏览器不知道如何处理由 JsonResult (application/json) 生成的内容类型,因此提示用户保存返回值。但是,将 JsonResult 方法中的内容类型更改为“text/plain”或“text/html”也不起作用。相反,IE8 重定向浏览器窗口以显示发回的原始 JSON。这些行为都不适合我。
我的感觉是问题源于顶部,也就是说 Ajax.BeginForm 表单的“ajaxification”根本不会在 IE8 中发生,但我可能是错的,无论如何,我不会知道该怎么做。
有什么线索吗?
谢谢。