c# - 如何修改查询数据表的ajax url?

标签 c# jquery asp.net-mvc-3

我想要做的是,如果组合框中的值发生变化,则修改数据表的 sAjaxSource,然后我想调用数据表的 fnDraw() 函数

数据表是:

 $("#example").dataTable({
             "aoColumns": [
                     { "sTitle": "Id" },
                      { "sTitle": "Name" }],


             "bProcessing": true,
             "bServerSide": true,

             "sAjaxSource": '@Url.Action("FetchData", "Home")',
             "sPaginationType": "full_numbers",

});

到目前为止我所拥有的是: C# 代码:

public JsonResult GetData(DataTableParameters param, int? SelectedId)
 {
//return the results
}

改变值的javascript代码是:

    $('#SelectedId').change(function () {
                alert("Hi");
                $("#example").dataTable(
                    {sAjaxSource:"/home/FetchData?SelectedId=1"}).fnDraw(true); ;
            });

它到达警报(“Hi”)点,但它不会重绘表格。我如何让它工作?

最佳答案

说明

要使用数据表 API,您首先需要有一个句柄。 .dataTable 函数返回创建的数据表的句柄。
所以,这样做

var oTable = $("#example").dataTable({
    ...
});

oTable.fnDraw();

应该允许您访问和执行特定表的函数。

<小时/>

信息

Datatables 不支持在初始化后更改设置,这是有充分理由的。

//This does *NOT* work.
var oTable = $("#example").dataTable({
    ...
});
var oSettings = oTable.fnSettings();
oSettings.sAjaxSource = "some_url";
//Nothing will happen
oTable.Draw();

但是,您可以尝试使用 fnServerData 函数在请求发送之前拦截请求,然后在发生更改时使用您自己的 url 更新表。
或者
您可以销毁该表并重新初始化它。

要了解有关 fnServerData 的更多信息,click here并搜索“fnServerData”。

<小时/>

解决方案

我不确定这是否真的有效,我以前没有这样做过,但它应该有效。

var currentSource = "this_url";
var oTable = $('#example').dataTable( {
    "bServerSide": true,
    "bProcessing": true,
    "aoColumns": [
        {"sTitle": "id"},
        {"sTitle": "name"}
    ],
    "sPaginationType": "full_numbers",
    "sAjaxSource": currentSource,
    "fnServerData": function ( sSource, aoData, fnCallback ) {
        $.ajax( {
            "dataType": 'json',
            "type": "POST",
            "url": currentSource,
            "data": aoData,
            "success": fnCallback
        });
    }
});

$("#SelectedId").change(function)(){
    currentSource = "new_url";
    oTable.fnDraw(); //or fnReloadAjax()
});
<小时/>

替代解决方案

另一种方法是销毁该表,然后使用新设置重新初始化它。然而,这是一种非常低效的处理方式。

var initParams = {
    "bServerSide": true,
    "bProcessing": true,
    "aoColumns": [
        {"sTitle": "id"},
        {"sTitle": "name"}
    ],
    "sPaginationType": "full_numbers",
    "sAjaxSource": "this_url",
};
var oTable = $('#example').dataTable(initParams);

$("#SelectedId").change(function)(){
    oTable.fnDestroy();
    initParams.sAjaxSource = "new_url";
    oTable = $('#example').dataTable(initParams);
});
<小时/>

旁注

当您拥有bServerSide = true必须处理所有事情,这意味着它也使所有事情变得复杂!

编码愉快! :)

关于c# - 如何修改查询数据表的ajax url?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8667649/

相关文章:

asp.net - 如何将 MVC3 Hello World 应用程序部署到本地主机并配置 IIS

c# - 如何在 C# 中将接口(interface)转换为其类型?

jquery - 如何在 JavaScript 中向 MVC 模型添加项目?

c# - Entity Framework 列映射

php - 与 php 的菜单交互

javascript - 如果网页未加载,则显示评论/信息框的 Ajax 代码

asp.net-mvc-3 - 无法将模型传递到布局页面内的部分 View

facebook - MVC3 Web 项目错误 : "An attempt was made to access a socket in a way forbidden by its access permissions 10.10.0.1:3128"

c# - 添加 Claims Transformer 后注入(inject)的 IPrincipal Claims 为空

c# - 如何在 ASP 中测试 AccountController?