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服务器,就不会触发失败事件并显示所有记录。我无法弄清楚为什么我会在行为上出现这种差异。任何想法都将受到欢迎。谢谢。

MVC 3 Ajax 表单 失败时未在 UAT 服务器上触发

我不应该为此目的使用自定义 http 状态代码,尽管我不确定它是否正确。首先,这不是一个错误,你想做的只是向用户传达有更多的记录(信息)。

您可以在分部视图中使用显示此状态的隐藏字段,而在onSuccess方法中,您必须从分部视图中读取隐藏字段,并根据状态将信息更新给用户。

发生这种情况的原因

可能有很多,一些常见的原因是:

  • 客户端和服务器之间的域不同。

默认情况下,AJAX 调用不允许跨域访问。 您可以在此处查看此问题的一些解决方案。

  • 相对路径与绝对路径。

有时你的开发服务器会像 http://localhost/myController/myAction然后你的 UAT 将是类似 http://myUatserver/myApp/myController/myAction .

如果您使用的是像/myController/myAction这样的绝对根路径,它将转到主机根目录,而找不到URL。 尝试在Ajax.BeginForm()中显式包含控制器和操作。

你可以通过使用Firebug或Chrome的开发工具等调试器来确定Ajax调用的位置,并查找XHR调用。