【问题标题】:ASP.NET MVC - Issue when receiving the Json response from IISASP.NET MVC - 从 IIS 接收 Json 响应时出现问题
【发布时间】:2013-03-26 16:43:05
【问题描述】:

请看下面的截图。我正在从控制器返回 Json 结果以填充级联下拉列表。当从 Visual Studio 运行时,该应用程序运行良好,但从 iis 服务器运行时,下拉菜单根本不会被过滤(抛出 404)。我真的很困惑。任何帮助,将不胜感激。谢谢。

图中,上图是VS运行的,下图是iis通过内网运行的。

我已按要求附上了下面的代码,但就像我上面提到的那样,从 Visual Studio 运行时它工作得非常好。

控制器

[HttpPost]
       public JsonResult FilterByDivision(string divisionId)
        {
            try
            {
                using (ctx)
                {
                    var SubDivResults = (from q in ctx.Test
                                           where q.divId== divisionId
                                           select new Models.SubDivisionDTO
                                           {
                                               SubDivID = q.subdivId,
                        SubDiv = q.SubDiv

                                           }).Distinct().ToList();
                    ajaxLookup.SubDiv = SubDivResults;           


                }
                JsonResult result = new JsonResult();
                    result.Data = ajaxLookup;
                      return result;
                }

            catch (Exception)
            {
                throw;
            }
        }

jQuery

//按分区过滤

$(function () {
$("select#DivisionId").change(function (evt) {
if ($("select#DivisionId").val() != "-1") {
$.ajax({
url: "/AjaxDropDown/FilterByDivision",
type: 'Post',
data: { divisionId: $("select#DivisionId").val() },
success: function (data) {
var subDivItems = "<option value='" + "-1" + "'>" + "Please Select" + "</option>";
$.each(data.subDivisions, function (i, val) {
subDivItems += "<option value='" + val.subDivId + "'>" + val.subDivName + "</option>";
});
$("select#subDivId").empty().html(subDivItems);
}
});
}
});
});

【问题讨论】:

  • 您能否提供处理请求的 c# 代码以及您进行的 javascript ajax 调用。这将有助于回答这个问题
  • 你在什么操作系统上运行什么版本的 IIS?
  • 我已按要求包含了代码。 IIS 在 windows 2008 server R2 上运行。谢谢

标签: jquery asp.net-mvc json iis asp.net-mvc-4


【解决方案1】:

例如,如果您从 jQuery 进行调用,请检查路径,因为您会收到 404。您可能正在虚拟目录中运行您的应用程序,并且您正在从您的 javascript 调用绝对路径。

这可能是 404 结果的问题。

从您的 sn-p 来看,问题可能出在此处:

$.ajax({
    url: "/AjaxDropDown/FilterByDivision",
    ...
});

你应该在这个表格上有一些东西:

$(function () {
    $("select#DivisionId").change(function (evt) {
        var resourceAddress = '@Url.Content("~/AjaxDropDown/FilterByDivision")';

        if ($("select#DivisionId").val() != "-1") {
            $.ajax({
                url: resourceAddress,
                type: 'Post',
                data: {
                    divisionId: $("select#DivisionId").val()
                },
                success: function (data) {
                    var subDivItems = "<option value='" + "-1" + "'>" + "Please Select" + "</option>";
                    $.each(data.subDivisions, function (i, val) {
                        subDivItems += "<option value='" + val.subDivId + "'>" + val.subDivName + "</option>";
                    });
                    $("select#subDivId").empty().html(subDivItems);
                }
            });
        }
    });
});

这每次都会给你一个相对路径。

【讨论】:

  • 感谢您的回复。下面是我如何引用我的 JQuery。没有做太多改变。正如 MVC4 预定义的那样。 @Styles.Render("~/Content/themes/base/css") @Styles.Render("~/Content/bootstrap") @Styles.Render("~/Content/css") @Scripts.Render("~/bundles/modernizr") @Scripts.Render("~/bundles/jquery") @Scripts.Render("~/bundles/jqueryui") @Scripts.Render("~/bundles/bootstrap ") 有什么建议吗?
  • 您好,您的问题可能出在:url: "/AjaxDropDown/FilterByDivision", 您正在调用域根目录中的资源,但在您的 ISS 中,该资源不存在。
  • 谢谢。你确定你的语法吗?现在,我收到诸如关闭条件编译、语法错误等警告。此外,即使从 Visual Studio 运行,我也看不到浏览器工具上的任何 ajax 请求。我可以像那样在里面包含剃刀标签吗?你能详细说明你的代码吗?
  • 更多信息。我已经在我的一个视图中用 jquery 代码编写了。不是作为单独的脚本文件。
  • 对不起,我已经更新了我的答案,我在那里遗漏了一些引号。 JS 解析器现在应该对引号和分号感到满意。
【解决方案2】:

查看您的 IIS 日志文件并检查 HTTP 子状态代码。它将提供一些有关导致 404 错误的原因的附加信息。见The HTTP status code in IIS 7.0, IIS 7.5, and IIS 8.0。如果您的子状态代码为 0 或 1,则您可能没有正确的 URL,或者您的文件实际上可能从服务器中丢失。如果还有其他问题,您还有其他问题,发布子状态代码会有所帮助。

如果您确实有 0 或 1 的子状态代码,Anderson Fortaleza 的回答可能是正确的。

【讨论】:

    猜你喜欢
    • 2011-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-02-26
    • 1970-01-01
    • 2021-08-01
    • 2012-03-21
    相关资源
    最近更新 更多