【问题标题】:ASP.NET MVC partial view jquery datatablesASP.NET MVC 部分视图 jquery 数据表
【发布时间】:2016-05-18 20:07:20
【问题描述】:

我对 mvc 中的 jQuery Datatables 插件有疑问。

我有一个带有 ajax 形式的视图,它可以在 sumbit 上加载带有表格的部分视图。

查看

...
    @using (Ajax.BeginForm("MyAction", "MyController", new AjaxOptions { UpdateTargetId = "myList" }, new { @id = "searchForm", @class = "form-horizontal" }))
    {
                                // some html  
    }
    <div id="myList">

    </div>

带表格的局部视图

@model IEnumerable<Item>
<table id="productsTable">
    <thead>
    <tr>
        <th>Name</th>
        <th>Description</th>
        <th></th>
    </tr>
    </thead>
    <tbody>
    @foreach (var item in Model)
    {
        <tr>
            <td>@Html.DisplayFor(x => item.Name)</td>
            <td>@Html.DisplayFor(x => item.Description)</td>
            <td>
                <div>
                    <a href="@Url.Action("Edit", "MyController", new {id =            item.Id})">
                    </a>
                    <a href="@Url.Action("Delete", "MyController", new {id = item.Id})" >
                    </a>
                </div>
            </td>
        </tr>
    }
    </tbody>
</table>

问题是如果我放脚本

$(document).ready(function() {
   $('#productsTable').DataTable();
});

在主视图中它将不起作用,因为部分视图由 ajax 加载。如果我将此脚本放在部分视图中,它将延迟工作:首先用户会看到简单的 html 表,然后它将被转换为数据表。

有什么方法可以用数据表更正加载部分视图? 感谢您的建议。

【问题讨论】:

  • 如果你把$('#productsTable').DataTable();放在$(document).ready(function(){}之外呢?
  • 同样的问题 - 它会显示简单的 html 表,然后转换为数据表
  • 尝试使用@{Html.RenderAction("MyAction", "MyController");} 渲染你的局部视图
  • 进展如何?你解决了吗?

标签: jquery ajax asp.net-mvc


【解决方案1】:

您不能在服务器上执行任何操作来“预加载”数据表,因为它只能在客户端上运行。要运行DataTable(),浏览器需要同时加载jQuery和HTML才能转换它,这就是为什么会有丑陋的“眨眼”。

我建议您使用 CSS position:absolute;visibility:hidden;(而不是 display:none; 将其加载(如果您愿意,使用 Ajax)将其加载到一个 div 中,并将其放置在屏幕外的某个位置(例如使用 left: -3000em; 或类似的)。之后一切都已加载,DataTable() 已运行,您可以使用 JS 将 div 移动到应该在的位置,然后将 positionvisibility 切换回正常状态。

如果您愿意,您甚至可以使用甜美的淡入效果来做到这一点。 :)

【讨论】:

    【解决方案2】:
    $(document).ready(function() {
       $('#productsTable').DataTable();
    });
    

    你应该把这段代码放在成功的ajax调用里面。 我认为这可能会解决您的问题:)

    【讨论】:

    • 将 $(document).ready(function() { 添加到我的 ajax 返回函数不起作用。它仍然说 DataTable 不是函数。:(如果我有 .DataTable() 里面主要的 $(document).ready() 调用,并在没有 ajax 的情况下加载 html,它可以工作。
    猜你喜欢
    • 2011-03-07
    • 2011-03-31
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2012-02-02
    • 2019-06-01
    相关资源
    最近更新 更多