2013-03-26 59 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