2013-03-26 84 views
1

请参阅下面的屏幕截图。我从控制器返回Json结果来填充级联下拉列表。当从Visual Studio运行应用程序时,该应用程序运行良好,但从iis服务器运行时,该下拉列表根本不会被过滤(抛出404)。我很困惑。任何帮助,将不胜感激。谢谢。ASP.NET MVC - 从IIS接收Json响应时发出的问题

在图中,顶部的是从VS运行的,而底部的是从iis通过Intranet运行的。

我已经按照要求附加了下面的代码,但正如我上面提到的,它从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); 
} 
}); 
} 
}); 
}); 

enter image description here

+0

您能否提供处理请求的c#代码以及您所做的javascript ajax调用。这将有助于回答这个问题 – iAmClownShoe 2013-03-26 16:46:28

+1

你在什么操作系统上运行什么版本的IIS? – Rob 2013-03-26 16:48:53

+0

我已经按要求包含了代码。 IIS在Windows 2008服务器R2上运行。谢谢 – Ren 2013-03-26 17:02:58

回答

4

如果您正在通话例如,从jQuery开始,请检查路径,因为您得到的是404.您可能正在虚拟目录中运行您的应用程序,并且您正在从JavaScript调用绝对路径。

这可能是404结果的问题。

从你的片段中的问题在于这里大概:

$.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); 
       } 
      }); 
     } 
    }); 
}); 

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

+0

感谢您的回复。以下是我如何引用我的JQuery。没有做太多的改变。就像MVC4预定义一样。 @ Styles.Render(“〜/ Content/themes/base/css”) @ Styles.Render(“〜/ Content/bootstrap”) @ Styles.Render/css“) @ Scripts.Render(”〜/ bundles/modernizr“) @ Scripts.Render(”〜/ bundles/jquery“) @Scripts。渲染(“〜/ bundles/jqueryui”) @ Scripts.Render(“〜/ bundles/bootstrap”) 有什么建议吗? – Ren 2013-03-26 16:58:28

+0

你好,你的问题很可能是在这里: 'URL:“/ AjaxDropDown/FilterByDivision”,' 您拨打电话在您的域的根的资源,但在你的ISS这个资源是不存在的。 – 2013-03-26 17:05:58

+0

我已经更新了我的答案。 – 2013-03-26 17:11:57

0

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

如果你确实有一个0或1的子状态代码,Anderson Fortaleza在他的回答中可能是正确的。

+0

谢谢。我在哪里可以找到iis日志文件? – Ren 2013-03-26 17:38:55