MVC 3 Ajax 表单 失败时未在 UAT 服务器上触发
本文关键字:服务器 UAT Ajax 表单 失败 MVC | 更新日期: 2023-09-27 18:36:59
我正在编写一个 MVC3 应用程序,在其中一个页面上,我带回了一个项目列表,这些项目显示在带有分页和排序的表中。
但是,我想发布一条消息,告诉用户如果回购的记录超过一定数量,请进一步细化搜索。
如果满足上述条件,我已经通过更改控制器中的Response.StatusCode
来实现了这一点;
public PartialViewResult VerbatimGridUpdate(VerbatimFormModel model)
{
if (ModelState.IsValid)
{
var mod = ModelBuilder.GetVerbatimFormModel(model);
if (mod.Verbatims.Count() > 10000)
{
HttpContext.Response.StatusCode = 33;
}
return PartialView("_VerbatimGrid", mod);
}
else
{
return PartialView(model.Verbatims);
}
}
在我的标记中,我使用 Ajax 形式的 OnFailure 事件捕获此故障;
function FailureLoading(ajaxContext) {
if (ajaxContext.status == "33") {
var ul = $("#validationSummary ul");
$("ul").empty();
ul.append("<li>" + "Too many records returned, please refine your search." + "</li>");
}
}
</script>
<div class="filters" >
@using (Ajax.BeginForm("VerbatimGridUpdate", null, new AjaxOptions { HttpMethod= "Get", UpdateTargetId = "grid-container", OnBegin = "StartLoading", OnSuccess = "FinishLoading", OnFailure="FailureLoading"}, new { id = "VerbatimListForm", name="VerbatimListForm" }))
{
在本地一切正常,但是一旦我部署到我们的UAT服务器,就不会触发失败事件并显示所有记录。我无法弄清楚为什么我会在行为上出现这种差异。任何想法都将受到欢迎。谢谢。
我不应该为此目的使用自定义 http 状态代码,尽管我不确定它是否正确。首先,这不是一个错误,你想做的只是向用户传达有更多的记录(信息)。
您可以在分部视图中使用显示此状态的隐藏字段,而在onSuccess
方法中,您必须从分部视图中读取隐藏字段,并根据状态将信息更新给用户。
可能有很多,一些常见的原因是:
- 客户端和服务器之间的域不同。
默认情况下,AJAX 调用不允许跨域访问。 您可以在此处查看此问题的一些解决方案。
- 相对路径与绝对路径。
有时你的开发服务器会像 http://localhost/myController/myAction
然后你的 UAT 将是类似 http://myUatserver/myApp/myController/myAction
.
如果您使用的是像/myController/myAction
这样的绝对根路径,它将转到主机根目录,而找不到URL。 尝试在Ajax.BeginForm()
中显式包含控制器和操作。
你可以通过使用Firebug或Chrome的开发工具等调试器来确定Ajax调用的位置,并查找XHR调用。