2016-02-24 164 views
2

我有一個帶有幾個級聯下拉列表的Web應用程序。所以我使用ajax來更新下一個下拉列表的值。我把JavaScript腳本放在一個單獨的文件中。AJAX路徑不正確

// Code that triggers when there is a change in Activity drop down. 
    $('#ActivityId').change(function() { 
     var activityId = $(this).val(); 

     // Empty the Workstation. 
     $('#WorkstationId').empty(); 

     $('.showhide-workstation').show(); 

     var url = "~/WorkOrderSubmissions/GetWorkstationsByActivityJson"; 
     // AJAX call that re-populate Workstation drop down depending on the Activity selected. 
     $.ajax({ 
      type: 'POST', 
      url: url, 
      dataType: 'json', 
      data: { activityId: activityId }, 
      success: function (codes) { 
       $('#WorkstationId').append('<option value=""></option>'); 
       $.each(codes, function (i) { 
        $('#WorkstationId').append('<option value = "' + codes[i].Value + '">' + codes[i].Text + '</option>'); 
       }); 
      }, 
      error: function (ex) { 
       $('#WorkstationId').append('<option value=""></option>'); 
      } 
     }); // END $.ajax() on GetRejectCodesByActivityJson 
    }); // END $('#ActivityId').change() 

代碼在Visual Studio中運行時起作用。當我將其部署到本地Web服務器時,它不起作用。我把它部署到

http://localhost/mea 

當我在Chrome中打開開發人員工具,我看到的錯誤。

POST http://localhost/~/WorkOrderSubmissions/GetLinesByWorkorderJson 404 (Not Found) 

我試圖給URL更改爲

url = ~/WorkOrderSubmissions/GetLinesByWorkorderJson 
url = /WorkOrderSubmissions/GetLinesByWorkorderJson 
url = WorkOrderSubmissions/GetLinesByWorkorderJson 

沒有他們的工作。我認爲〜應該去到網絡應用程序的根目錄,即http://localhost/mea

回答

3

~語法只能被ASP.Net識別;它將被字面上的任何JS代碼所採用。你需要通過你的C#代碼提供的URL JS:

var url = '@Url.Content("~/WorkOrderSubmissions/GetWorkstationsByActivityJson")'; 

或者更好的是:

var url = '@Url.Action("GetWorkstationsByActivityJson", "WorkOrderSubmissions")'; 
+2

旁註:顯然,你需要正確編碼URL時,呈現在JavaScript(分別經常被問到的問題)以及將JS從HTML中分離出來是一種很好的做法 - 爲此,您需要通過其他方式來傳遞此類url,例如某些HTML元素的'data-'屬性。 –

+0

我分離JS腳本的原因是我有多個級聯下拉菜單。如果我把它放在那裏,它會使_Layout.cshtml變得很長很醜。有沒有辦法將@ Url.Content傳遞給script.js文件? – Eric

+0

是的 - 這是將請求的URL作爲@AlexeiLevenkov提及的相關元素上的'data'屬性提供的模式。 –