2015-10-20 86 views
0

在我的DataTables中,我想避免重複並在web.config文件中保留基地址。然後,我只需要連接可變部分。下面是我從沒有成功的瀏覽器和消息(IE 11)完成:DataTables - 如何避免硬編碼url?

「的DataTable警告:表ID = configurationTable - 阿賈克斯的錯誤......」

的Javascript:

$(document).ready(function() { 
     var url = @Html.Raw(Json.Encode(ConfigurationManager.AppSettings["BaseAddress"])) + "Configuration"; 
     $('#configurationTable').DataTable({ 
      ajax: { 
       'url': "'" + url + "'", //url is concatenated correctly 
       'dataSrc': 'value', 
      },...edited for brevity 

配置設置:

<add key="BaseAddress" value="http://myServer:8083/api/"/> 

更新: 我也試過這個,不用把url用引號括起來。 Chrome顯示406錯誤 - 不可接受

更新2: 我調用的Web API服務具有OdataControllers和ApiControllers。兩者的前綴是相同的,所以需要首先在WebApiConfig中配置OData。另外,在url參數中沒有引號。

+0

你得到什麼錯誤? (按照此獲取錯誤代碼/說明:http://datatables.net/manual/tech-notes/7) –

+0

嘗試將其更改爲「'url':url,'。沒有必要添加單引號。 –

+0

@AlexArt ...在Chrome瀏覽器中顯示406 - 不可接受 –

回答

1

您不應將URL包裝在單引號中。

而且我不是ASP.NET專家,但據this answer你的代碼應改爲:

$(document).ready(function() { 
    var url = '<%= ConfigurationManager.AppSettings["BaseAddress"] %>' + 'Configuration'; 
    $('#configurationTable').DataTable({ 
     ajax: { 
      'url': url, 
      'dataSrc': 'value' 
     }, 
     // ... skipped ... 
    } 
}); 
+0

我也試過了,沒有運氣 - 同樣的錯誤。這是一個406 - 不可接受 –

+0

@BigDaddy,可能有一些其他問題與導致它的URL無關。只要您看到對正確URL的請求,就意味着使用了<%= ConfigurationManager.AppSettings [「BaseAddress」]%>'的解決方案就可以工作。 –

+0

你說得對。我的路由在我撥打的OData服務上很差 –

0

當你使用MVC,我假設你的JS文件是分開的,即不包含在視圖中。如果是這種情況,則使用Razor語法訪問該值將不起作用。

試試這個:

在您發送到視圖模型,添加屬性的web.config中設置:

public string BaseAddress 
{ 
    get { return ConfigurationManager.AppSettings["BaseAddress"]; } 
} 

這樣,當你的模型傳遞給視圖,它總是具有BaseAddress值。在查看您添加一個隱藏字段:

@Html.HiddenFor(x => x.BaseAddress, new { id = "baseaddress" }) 

而且你的數據表初始化JS代碼可以檢索:

url: $("#baseaddress").val() + '/Configuration'; 
+0

謝謝,請參閱我的更新2評論。 –