在哪里以及如何将DataTables添加到MVC 6项目?

时间:2016-02-01 19:44:04

标签: jquery css asp.net-core datatables asp.net-core-mvc

我试图让DataTables在MVC 6项目中工作。我已经完成了整个项目,但在尝试列出用户时,它并没有使用DataTables。

我不确定添加到MVC 6项目的位置和内容。一切都在不同的位置。我运行Nuget包管理器并发现了一些内容,并将其添加到我的project.json文件中:“jquery.datatables”:“1.10.10”

但DataTables无效。我知道这是对我的问题的可怕描述,但我很确定我在正确的位置没有正确的.js和.css文件。但是,访问DataTables下载网站没有任何帮助,因为有数百万的选择可供下载。

以下是我列出注册用户的视图。它可以正常工作,但不使用DataTables,如果找不到DataTable,则不会触发警报。 DataTables的默认安装内置了搜索框和OrderBy箭头。当前视图中没有一个 - 它可以工作但没有DataTables。

@model List<MVC6.Models.UserViewModel>

@{
    ViewBag.Title = "Users";
}

<ol class="breadcrumb">
    <li>@Html.ActionLink("Administration", "Index", "Admin")</li>
    <li>Users</li>
</ol>
<h2>@ViewBag.Title</h2>

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        try {
            $('#users').dataTable({});
        } catch (err) {
            alert(err + ":\n Datatables installed?  Included in Resource bundle?");
        }
    });
</script>

@if (!ViewData.ModelState.IsValid)
{
    <div class="alert alert-danger" role="alert">
        <div asp-validation-summary="ValidationSummary.All"></div>

        @*@Html.ValidationSummary()*@
    </div>


}

<fieldset>
    <table id="users" class="display">

        <thead>
            <tr>
                <th width="20%">Email</th>
                <th width="20%">Roles</th>
                <th width="20%">Action</th>
            </tr>
        </thead>
        <tbody>
            @if (null != Model)
            {
                foreach (var user in Model)
                {
                    <tr>
                        <td>
                            @Html.DisplayFor(modelItem => user.Email)

                        </td>
                        <td>
       @if (null != user.Roles)
        {
            @*foreach (var role in user.Roles)
            {
                @role
                <br />
            }*@
           @user.Roles
       }
                        </td>
                        <td>
                            <div class="btn-group" role="group" aria-label="...">
                                @Html.ActionLink("Edit", "Edit", new { userId = user.UserId }, new { @class = "btn btn-default" })

                                @Html.ActionLink("Delete", "Delete", new { userId = user.UserId }, new { onclick = "return confirm('Are you sure you want to delete this user?')", @class = "btn btn-default" })

                            </div>
                        </td>
                    </tr>
                }
            }
        </tbody>
    </table>
</fieldset>

我考虑过这一点,并希望显示我的_Layout.cshtml文件,其中可能会放置引用。

<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width, initial-scale=1.0" />
        <title>@ViewData["Title"] - MVC6</title>

        <environment names="Development">
            <link rel="stylesheet" href="~/lib/bootstrap/dist/css/bootstrap.css" />
            <link rel="stylesheet" href="~/css/site.css" />
        </environment>
        <environment names="Staging,Production">
            <link rel="stylesheet" href="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/css/bootstrap.min.css"
                  asp-fallback-href="~/lib/bootstrap/dist/css/bootstrap.min.css"
                  asp-fallback-test-class="sr-only" asp-fallback-test-property="position" asp-fallback-test-value="absolute" />
            <link rel="stylesheet" href="~/css/site.min.css" asp-append-version="true" />
        </environment>
    </head>
    <body>
        <div class="navbar navbar-inverse navbar-fixed-top">
            <div class="container">
                <div class="navbar-header">
                    <button type="button" class="navbar-toggle" data-toggle="collapse" data-target=".navbar-collapse">
                        <span class="sr-only">Toggle navigation</span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                        <span class="icon-bar"></span>
                    </button>
                    <a asp-controller="Home" asp-action="Index" class="navbar-brand">MVC6</a>
                </div>
                <div class="navbar-collapse collapse">
                    <ul class="nav navbar-nav">
                        <li><a asp-controller="Home" asp-action="Index">Home</a></li>
                        <li><a asp-controller="Home" asp-action="About">About</a></li>
                        <li><a asp-controller="Home" asp-action="Contact">Contact</a></li>
                    </ul>
                    @await Html.PartialAsync("_LoginPartial")
                </div>
            </div>
        </div>
        <div class="container body-content">
            @RenderBody()
            <hr />
            <footer>
                <p>&copy; 2016 - MVC6</p>
            </footer>
        </div>

        <environment names="Development">
            <script src="~/lib/jquery/dist/jquery.js"></script>
            <script src="~/lib/bootstrap/dist/js/bootstrap.js"></script>
            <script src="~/js/site.js" asp-append-version="true"></script>
        </environment>
        <environment names="Staging,Production">
            <script src="https://ajax.aspnetcdn.com/ajax/jquery/jquery-2.1.4.min.js"
                    asp-fallback-src="~/lib/jquery/dist/jquery.min.js"
                    asp-fallback-test="window.jQuery">
            </script>
            <script src="https://ajax.aspnetcdn.com/ajax/bootstrap/3.3.5/bootstrap.min.js"
                    asp-fallback-src="~/lib/bootstrap/dist/js/bootstrap.min.js"
                    asp-fallback-test="window.jQuery && window.jQuery.fn && window.jQuery.fn.modal">
            </script>
            <script src="~/js/site.min.js" asp-append-version="true"></script>
        </environment>

        @RenderSection("scripts", required: false)
    </body>
</html>

1 个答案:

答案 0 :(得分:0)

我去了The DataTables download page并构建了一个下载,我在文档就绪函数的正上方添加了各种脚本引用。其中一个问题是_layout.chstml中的jquery位于页面底部,当顶部需要它时。

我下载了.zip,将DataTables-1.10.10文件夹放在wwwroot文件夹中。

在_Layout.chstml中我放了wwwroot / css / datatables.css和wwwroot / js / datatables.js(它们位于.zip文件的根目录中。

在Index.chstml视图中,我从.zip和/datatables-1.10.10/js/jquery.datatables.css中安装了我安装的文件夹中的/datatables-1.10.10/js/jquery.datatables.js

就在我的下方: /lib/jquery/dist/jquery.js

到目前为止,MVC很多次发现脚本和链接文件的顺序必须正确定位,有时默认的_Layout.chstml文件不会将它们放在需要的位置。这个基本安装为我提供了数据表,每个列都有默认搜索框,分页和Order By箭头。很甜蜜。 。至少在我今生的今天。希望这有助于其他人。

<h2>@ViewBag.Title</h2>
<link href="~/datatables-1.10.10/css/jquery.datatables.css" rel="stylesheet" />
<script src="~/datatables-1.10.10/js/jquery.datatables.js"></script>
<script src="/lib/jquery/dist/jquery.js"></script>

<script type="text/javascript" language="javascript">
    $(document).ready(function () {
        alert("inside document ready");
        try {
            $('#users').dataTable({});
        } catch (err) {
            alert(err + ":\n Datatables installed?  Included in Resource bundle?");
        }
    });
</script>