【问题标题】:Datatable - DOM sourced Object array will not load data数据表 - DOM 源对象数组不会加载数据
【发布时间】:2018-01-25 17:03:04
【问题描述】:

我正在尝试使用位于 DOM 中的对象数组来初始化数据表

我有简单的数据表初始化代码:

$(document).ready(function () {
    $('#ManageSubReps').DataTable({
        data: GetSRData(),
        columns: [
            { "data": "username" },
            { "data": "AspNetUserRoleName" },
            { "data": "Name" },
            { "data": "Address" },
            { "data": "City" },
            { "data": "State" },
            { "data": "Zip" },
            { "data": "EmailAddress" },
            { "data": "HomePhone" },
            { "data": "CellPhone" },
            { "data": "New_Rep" },
            { "data": "Stand_By" },
            { "data": "DateApproved" },
            { "data": "AspNetUserID" }
        ]
    });
});

我的 GetSRData 函数如下所示:

function GetSRData() {
    return @Html.Raw(Model.JsonData)
}

我的服务器端代码如下所示:

public ActionResult ManagerSubReps(){
var model = new ManageSubRepsViewModel();
model.JsonData = JsonConvert.SerializeObject(new {data = _iManageSubRepsManager.GetSubRepsAsync(Session["CID"])});

return View(model);
}

我的数据片段如下所示:

{"data":[{"username":"01001MC","MASTER":null,"Name":"A name","Address":"105 Address Dr.","City":"Agawam","State":"MA","Zip":"89898","EmailAddress":"blerb@yahoo.com","HomePhone":"","CellPhone":"8767878767","New_Rep":"False","Stand_By":"False","DateApproved":null,"AspNetUserID":null,"AspNetUserRoleName":null},{"username":"01002RG","MASTER":"False","Name":"Blooby palooby","Address":"7 Eaton drive, gumbie@Gmail.Com","City":"Amherst","State":"MA","Zip":"35656","EmailAddress":"chumpy@GMAIL.COM","HomePhone":"","CellPhone":"8986786654","New_Rep":"False","Stand_By":"False","DateApproved":null,"AspNetUserID":null,"AspNetUserRoleName":null}]}

HTML:

<table id="ManageSubReps" class="compact display">
    <thead>
        <tr>
            <th>Username</th>
            <th>Role</th>
            <th class="dt-left">Name</th>
            <th class="dt-left">Address</th>
            <th class="dt-left">City</th>
            <th>State</th>
            <th>Zip</th>
            <th class="dt-left">Email</th>
            <th>Home Phone</th>
            <th>Cell Phone</th>
            <th>New Rep</th>
            <th>Stand By</th>
            <th>Approved Date</th>
            <th></th>
        </tr>
    </thead>
</table>

当我返回数据并尝试初始化数据表时,可能会发生两件事:

  1. 如果我删除 Json 对象的“数据”部分,那么 datatales 将呈现数据表,但其中没有任何数据
  2. 如果我留下 Json 对象的“数据”部分,那么数据表会给我错误:“请求第 0 行第 0 列的未知参数“0”。这基本上意味着它无法区分数据并与数据形成数据表。

我检查了列数据,它完全匹配。我无法弄清楚问题是什么。

谁能帮忙?

编辑:我知道问题与作为字符串的数据有关,因为我在其上调用 HTML.Raw()。但是,我不确定如何在没有这个的情况下从模型中传递数据

【问题讨论】:

  • 我已将其删除,但奇怪的是它仍然没有产生任何影响。但是感谢您指出这一点

标签: javascript c# jquery json datatable


【解决方案1】:

尝试使用ajax 代替数据和完全限定的 url(控制器/api 方法)来获取 ajax 数据:

$(document).ready(function() {
    $('#ManageSubReps').DataTable( {
        "processing": true,
        "serverSide": true,
        "ajax": "ManagerSubReps",
        columns: [
          { "data": "username" },
          { "data": "AspNetUserRoleName" },
          { "data": "Name" },
          { "data": "Address" },
          { "data": "City" },
          { "data": "State" },
          { "data": "Zip" },
          { "data": "EmailAddress" },
          { "data": "HomePhone" },
          { "data": "CellPhone" },
          { "data": "New_Rep" },
          { "data": "Stand_By" },
          { "data": "DateApproved" },
          { "data": "AspNetUserID" }
        ]
    } );
} );

请参考https://datatables.net/examples/server_side/object_data.html了解更多详情。

【讨论】:

  • 嗨,我曾想过这样做,但我必须将我的操作设为 GET 请求,这会使我面临一些漏洞。而且没有足够的数据来保证服务器端处理
  • 如果你的后端代码是安全的,GET不会打开漏洞,而且@Html.Raw可以用于脚本注入。没有在代码中看到任何问题,但实际上需要在某个时候进行调试才能解决问题。你确定你得到的数据和你发布的一样吗?
  • 是的,你是对的。生病交换到 Ajax GET 因为我有 5000 条记录,这不足以进行服务器端处理。干杯布拉塔
  • 只是为了强调这一点,您可以通过在请求中添加防伪令牌来使其成为 POST 请求并且更安全。这就是我所做的
猜你喜欢
  • 1970-01-01
  • 2023-03-14
  • 2021-04-25
  • 1970-01-01
  • 1970-01-01
  • 2016-03-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多