DataTables - 如何避免硬编码网址?

时间:2015-10-20 17:51:17

标签: jquery asp.net-mvc datatables

在我的DataTables中,我想避免重复并将基地址保存在web.config文件中。然后,我只需要连接变量部分。这是我没有成功的事情以及来自浏览器的消息(IE 11):

  

“DataTables警告:表id = configurationTable - Ajax错误......”

使用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参数没有引号。

2 个答案:

答案 0 :(得分:1)

您不应将URL包装在单引号中。

此外,我不是ASP.NET专家,但根据this answer,您的代码应更改为:

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

答案 1 :(得分:0)

当您使用MVC时,我假设您的js文件是独立的,即未包含在视图中。如果是这种情况,那么使用Razor语法访问该值将无法正常工作。

试试这个:

在发送给View的模型中,为web.config设置添加属性:

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

这样,当您将模型传递给视图时,它始终具有BaseAddress值。在视图中添加隐藏字段:

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

您的数据表初始化js代码可以检索它:

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