0

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

4

2 回答 2

1

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

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

于 2012-06-11T16:22:15.950 回答
0

发生这种情况的原因有很多,一些常见的原因是:

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

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

  • 相对路径与绝对路径。

有时您的开发服务器将类似于 http://localhost/myController/myAction,然后您的 UAT 将类似于http://myUatserver/myApp/myController/myAction.

如果您使用的是绝对根路径,/myController/myAction那么它将转到主机根目录并且找不到 URL。尝试在Ajax.BeginForm().

您可以通过使用诸如 Firebug 或 Chrome 的开发工具之类的调试器确定 Ajax 调用的位置,并查找 XHR 调用。

于 2012-06-11T16:15:47.427 回答