【初学者指南】在ASP.NET MVC 5中创建GridView

介绍

在这篇文章中,我们将会学习如何在 ASP.NET MVC 中创建一个 gridview,就像 ASP.NET Web 表单中的 gridview 一样。服务器端和客户端有许多可用的第三方库,这些库能够提供所有必需的功能,如 Web 表格中的搜索、排序和分页等。是否包含这些功能,取决于应用的特殊需求,例如在客户端和服务器端提供搜索或其它功能的需求等。

可用的库

以下是一些可用的库和插件:

  • Grid.Mvc
  • MVCGrid.NET
  • PagedList.MVC
  • JQuery.Grid
  • JQuery Grid for ASP.NET MVC
  • JQuery DataTables

使用 jQuery 数据表

以上库和插件都有自己的优缺点,其中 jQuery 数据表是个不错的选择。它具有高度的灵活性,支持分页,即时搜索,多列排序;它也支持几乎所有可以被绑定的数据源。

例如:

  • DOM
  • JavaScript的
  • Ajax
  • Server-side processing

我最喜欢的选项之一是, jQuery 数据表不但支持客户端搜索、分页、排序等,而且还提供了一个可以在服务器端处理的选项。例如,一种情景是:因为数据库中有太多的数据,所以在客户端的进行分页并不是一个好选择。表格中有百万行数据,如果用客户端分页功能来绑定,页面就会由于大量的数据行处理和HTML渲染而反应很迟钝。

下面,我们先来看看一个利用客户端处理的例子。我们将会实现一个具有搜索、排序和分页功能的工作表,正如下图中我们看到的:

首先,我们创建将会用到的数据库和表格,打开 SQL Management Studio 并运行以下脚本:

CREATE DATABASE [GridExampleMVC]
 GO
 CREATE TABLE [dbo].[Assets] (
     [AssetID]                   UNIQUEIDENTIFIER NOT NULL,
     [Barcode]                   NVARCHAR (MAX)   NULL,
     [SerialNumber]              NVARCHAR (MAX)   NULL,
     [FacilitySite]              NVARCHAR (MAX)   NULL,
     [PMGuide]                   NVARCHAR (MAX)   NULL,
     [AstID]                     NVARCHAR (MAX)   NOT NULL,
     [ChildAsset]                NVARCHAR (MAX)   NULL,
     [GeneralAssetDescription]   NVARCHAR (MAX)   NULL,
     [SecondaryAssetDescription] NVARCHAR (MAX)   NULL,
     [Quantity]                  INT              NOT NULL,
     [Manufacturer]              NVARCHAR (MAX)   NULL,
     [ModelNumber]               NVARCHAR (MAX)   NULL,
     [Building]                  NVARCHAR (MAX)   NULL,
     [Floor]                     NVARCHAR (MAX)   NULL,
     [Corridor]                  NVARCHAR (MAX)   NULL,
     [RoomNo]                    NVARCHAR (MAX)   NULL,
     [MERNo]                     NVARCHAR (MAX)   NULL,
     [EquipSystem]               NVARCHAR (MAX)   NULL,
     [Comments]                  NVARCHAR (MAX)   NULL,
     [Issued]                    BIT              NOT NULL,
     CONSTRAINT [PK_dbo.Assets] PRIMARY KEY CLUSTERED ([AssetID] ASC)
 )
 GO

源码中附有完整的 SQL 脚本,你可以利用它使用样例中的数据来创建数据库和表单。

现在,创建一个新的 ASP.NET MVC 5 Web 应用程序。打开 Visual Studio 2015,点击文件>>新建>>项目。

从对话框中跳转到 Web,选择 ASP.NET Web 应用程序项目,然后单击确定。

在模板中选择 MVC,如果编写了应用的单元测试,请先做检查,并点击 OK。

我们的工程都是用基本的功能创建的。现在,我们开始创建数据库上下文类,这个类将会被 Data Access 实体框架使用。

首先,我们需要为 Asset 表创建一个模型,我们将会使用这个模型通过 ORM 来恢复数据。

在模型文件夹中,创建一个名为 Asset 的新类:

using System.ComponentModel.DataAnnotations;
namespace GridExampleMVC.Models
{
    public class Asset
    {
        public System.Guid AssetID { get; set; }
        [Display(Name = "Barcode")]
        public string Barcode { get; set; }
        [Display(Name = "Serial-Number")]
        public string SerialNumber { get; set; }
        [Display(Name = "Facility-Site")]
        public string FacilitySite { get; set; }
        [Display(Name = "PM-Guide-ID")]
        public string PMGuide { get; set; }
        [Required]
        [Display(Name = "Asset-ID")]
        public string AstID { get; set; }
        [Display(Name = "Child-Asset")]
        public string ChildAsset { get; set; }
        [Display(Name = "General-Asset-Description")]
        public string GeneralAssetDescription { get; set; }
        [Display(Name = "Secondary-Asset-Description")]
        public string SecondaryAssetDescription { get; set; }
        public int Quantity { get; set; }
        [Display(Name = "Manufacturer")]
        public string Manufacturer { get; set; }
        [Display(Name = "Model-Number")]
        public string ModelNumber { get; set; }
        [Display(Name = "Main-Location (Building)")]
        public string Building { get; set; }
        [Display(Name = "Sub-Location 1 (Floor)")]
        public string Floor { get; set; }
        [Display(Name = "Sub-Location 2 (Corridor)")]
        public string Corridor { get; set; }
        [Display(Name = "Sub-Location 3 (Room No)")]
        public string RoomNo { get; set; }
        [Display(Name = "Sub-Location 4 (MER#)")]
        public string MERNo { get; set; }
        [Display(Name = "Sub-Location 5 (Equip/System)")]
        public string EquipSystem { get; set; }
        public string Comments { get; set; }
        public bool Issued { get; set; }
    }
}

现在从解决方案资源管理器跳转到模型文件夹,并打开 IdentityModels.cs 文件。我们将在数据库上下文中为 Asset 表添加一个属性,这个属性将会成为 Asset 表的实体框架表示,用它来创建脚本。在 ApplicationDbContext 类中添加新的属性:

public class ApplicationDbContext : IdentityDbContext<applicationuser>
{
    public ApplicationDbContext()
        : base("DefaultConnection", throwIfV1Schema: false)
    {

    }
    public DbSet<asset> Assets { get; set; }
    public static ApplicationDbContext Create()
    {
        return new ApplicationDbContext();
    }
}

以上是 ASP.NET identity 2.0 的默认实体框架设置,我们通过为 Asset 表添加新的 DbSet 来扩展它。

现在,在控制器文件夹中添加一个空的名为 AssetController 的控制器,这个控制器件将用于所有 Asset 的相关工作。

public class AssetController : Controller
    {
        // GET: Asset
        public ActionResult Index()
        {
            return View();
        }
    }

现在我们需要安装用于创建表格的 JQuery DataTables,进入Tools >> NuGet Package Manager >> Manage Nuget Packages for Solution,并点击它。

安装包管理器默认是打开的,它会在你的解决方案中显示成已安装的 nugget 包,点击浏览按钮,然后搜索 JQuery DataTables 包,选择它并检查已安装了 JQuery DataTables 的项目解决方案。在我们的案例里,我们将会以每一个需求的方式将其安装在 GridExampleMVC web 中,然后点击安装按钮。

Visual Studio 将会提示是否要修改解决方案,你需要点击 Ok 来继续安装 JQuery DataTables 包。

在 nugget 包安装成功后,我们需要在视图中引入 jQuery DataTables 的必要的 JS 和 CSS,为此,我们需要注册 jQuery DataTables,请打开位于 App_Start 文件夹中的 BundleConfig.cs 文件并在 CSS 和 JS 文件的结尾处添加以下代码:

bundles.Add(new ScriptBundle("~/bundles/datatables").Include(

                        "~/Scripts/DataTables/jquery.dataTables.min.js",

                        "~/Scripts/DataTables/dataTables.bootstrap.js"));

bundles.Add(new StyleBundle("~/Content/datatables").Include(

          "~/Content/DataTables/css/dataTables.bootstrap.css"));

在为数据表添加了脚本和 CSS 之后,我们需要在总体布局中添加它们,默认情况下, _Layout.cshtml 位于 Views >> Shared 中,_ViewStart.cshtml 也默认位于这里。

在写控制器代码之前,我们需要为实体框架配置连接字符串,以便在操作数据库时来连接数据库。因此,我们的连接字符串应该被指定给一个有效的数据源,以便我们在运行时应用不会被打断。

为了做到这一点,请打开 web.config 并为数据库提供连接字符串。在配置文件中,你会发现下面配置节点中的连接字符串,你需要在节点中根据你的系统来修改连接字符串。

<connectionstrings>

    <add connectionstring="Data Source=(localdb)\MSSQLLocalDB;Initial Catalog=GridExampleMVC;

     Integrated Security=True;MultipleActiveResultSets=true" name="DefaultConnection"

     providername="System.Data.SqlClient"/>

</connectionstrings>

现在,请在控制器中添加数据库上下文的属性,以便我们能够在数据库中执行请求。

private ApplicationDbContext _dbContext;
public ApplicationDbContext DbContext
{
    get
    {
        return _dbContext ?? HttpContext.GetOwinContext().Get<applicationdbcontext>();
    }
    private set
    {
        _dbContext = value;
    }
}

我们将会在任何需要的控制器行为中,使用这个属性查询数据库。

在检索行为中,我们将简单地获取该表中的所有行,并将其传递给 view:

public ActionResult Index()
{
    return View(DbContext.Assets.ToList());
}

我们完整的 controller 类代码,就像这样:

using GridExampleMVC.Models;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using Microsoft.AspNet.Identity.Owin;
namespace GridExampleMVC.Controllers
{
    public class AssetController : Controller
    {
        private ApplicationDbContext _dbContext;
        public ApplicationDbContext DbContext
        {
            get
            {
                return _dbContext ?? HttpContext.GetOwinContext().Get<applicationdbcontext>();
            }
            private set
            {
                _dbContext = value;
            }
        }
        public AssetController()
        { 

        }
        public AssetController(ApplicationDbContext dbContext)
        {
            _dbContext = dbContext;
        }
        // GET: Asset
        public ActionResult Index()
        {
            return View(DbContext.Assets.ToList());
        }
    }
}

现在来到视图部分,在视图部分中我们将会编写如何以 HTML 实现渲染的代码,请为检索行为创建一个空模板(没有模型)的视图,然后在其中添加如下代码:

@model IEnumerable< GridExampleMVC.Models.Asset>
<div class="row">
    <div class="col-md-12">
        <div class="panel panel-primary list-panel" id="list-panel">
            <div class="panel-heading list-panel-heading">
                <h1 class="panel-title list-panel-title">Assets</h1>
            </div>
            <div class="panel-body">
                <table id="assets-data-table"
                class="table table-striped table-bordered"
                 style="width:100%">
                    <thead>
                        <tr>
                            <th>Bar Code</th>
                            <th>Manufacturer</th>
                            <th>Model Number</th>
                            <th>Building</th>
                            <th>Room No</th>
                            <th>Quantity</th>
                        </tr>
                    </thead>
                    <tbody>
                        @foreach (var asset in Model)
                        {
                            <tr>
                                <td>@asset.Barcode</td>
                                <td>@asset.Manufacturer</td>
                                <td>@asset.ModelNumber</td>
                                <td>@asset.Building</td>
                                <td>@asset.RoomNo</td>
                                <td>@asset.Quantity</td>
                            </tr>
                        }
                    </tbody>
                </table>
            </div>
        </div>
    </div>
</div>

@section Scripts
{
 <script type="text/javascript">
     $(document).ready(function () {
         $('#assets-data-table').DataTable();
     });
    </script>
 }

现在运行这个应用程序,你会看具有可用的排序、搜索和过滤功能的表格。但是现在还有一个问题,那就是这是在客户端处理的,当行为被调用时,所有数据会被视图渲染,这样就会造成当大量数据出现时,页面性能变慢或者页面载入时间增加。

在下一篇文章中,我们将会学习到如何通过使用服务器端分页、排序和过滤来使页面呈现的更好。对于具有大量的数据时,这是一个更好的方法。

通过本文的介绍,希望大家能够掌握在 ASP.NET MVC 5 中创建 GridView 的方法。表格控件是项目开发中经常用到的控件,其中以性能著称的是FlexGrid表格控件,这是一款轻量级的高性能表格控件,加载和滚动速度比竞争对手快10倍以上,能提供丰富的功能集,而不膨胀核心控件。

 

文章来源:by Ehsan Sajjad

原文链接:http://www.codeproject.com/Articles/1114208/Beginners-Guide-for-Creating-GridView-in-ASP-NET-M

 

相关阅读:

是什么让C#成为最值得学习的编程语言

从Visual Studio看微软20年技术变迁

C#开发人员应该知道的13件事情

Visual Studio 2017正式版发布全纪录

 

时间: 2024-10-17 10:48:15

【初学者指南】在ASP.NET MVC 5中创建GridView的相关文章

领先技术:在ASP.NET MVC 4中创建为移动设备优化的视图

如果深入探讨有关编写移动设备网站的常识性考虑因素,会发现其中有一种内在矛盾.一方面,客户在其 编写应用程序和网站的方法中强烈要求(或乐于要求)移动优先.另一方面,同一些人又经常称赞 CSS 媒体 查询和流体布局.我所发现的矛盾在于经常利用 CSS 媒体查询和流体布局并未在其他内容之前优先处理移动 方面,它不是一种移动优先的方法.在本文中,我将介绍如何使用服务器端逻辑为给定设备呈现最佳的显示效 果,并介绍 ASP.NET MVC 4 的一种新功能,称为显示模式. 问题不在于 CSS 媒体查询作为一

asp.net MVC项目中 没有easyui插件的智能提示

问题描述 asp.net MVC项目中 没有easyui插件的智能提示 5C vs2015 中的mvc4项目,已经分别把jQuery.min.js jquery.easyui.min.jseasyui-lang-zh_CN.js依次拖入,写js代码的时候 智能提示只有jquery中的属性和方法 没有easyui的(例如$.messager就出不来智能提示),但是可以正常执行出来插件效果,尝试编辑cshtml.html格式的文件都不提示,尝试把 jquery.easyui.min.js的文件名改为

浅谈ASP.NET MVC 3中如何使用Model

昨天博客发了新文章,讲一下我对如何使用MVC中的Model的看法,不是什么大技术,当是一个技术讨论^^ 原文地址:http://www.youguanbumen.net/Article.aspx?id=79 原文: 前两天写了个文章ASP.NET MVC 3 -- Model远程验证,主要记录了一下ASP.NET MVC 3中新增的RemoteAttribute类的使用,得益于这个类,我们可以在模型中为属性配置客户端远程校验的业务,文章中给了出一个简单的实体类MyUser_Add,举了一个最常见

使用ASP.NET MVC Futures中的异步Action

之前看过老赵这两篇文章.也研究了一下老赵异步的实现方式. 不过感觉自己扩展的话,在ASP.NET MVC中使用异步还真是麻烦,刚好看到从RC1版开始 ASP.NET MVC Futures中提供了几个支持异步的类. 相关的类包括AsyncActionDescriptor.AsyncController.AsyncControllerActionInvoker. AsyncManager.AsyncResultWrapper.AsyncTimeoutAttribute.NoAsyncTimeout

在ASP.NET MVC 4中使用Kendo UI Grid

Kendo UI 是Telerik推出的一套based on jQuery 的 Framework,提供了很多控件(Menu .Grid .Combox等...), 底层以Html5 + jQuery 来打造,并且兼容于各大浏览器,包含IE7.IE8.相关介绍可以参考AJAX式数据清单的新选择-Kendo UI Grid. 以下内容参考台湾的黑老大的文章:在ASP.NET MVC 4中使用Kendo UI Grid 建立一个ASP.NET MVC 4专案 使用NuGet安装KendoUIWeb及

ASP.NET MVC 3中301永久重定向不带www域名到带www的域名

使用 ASP.NET 又喜欢跟进新技术的朋友可能已经知道,在 ASP.NET 4.0 中增加了 Response.RedirectPermanent() 方法来实现永久重定向,方法的作用在注释中解释的很清楚:执行从所请求 URL 到所指定 URL 的永久重定向,并提供用于完成响应的选项. 在 ASP.NET MVC 3 项目中,我们可以根据需要来使用以下写法实现永久重定向:  代码如下 复制代码 public ActionResult Index() {     return RedirectP

使用ASP.NET MVC Futures 中的异步Action

  之前看过老赵这两篇文章.也研究了一下老赵异步的实现方式. 不过感觉自己扩展的话,在ASP.NET MVC中使用异步还真是麻烦,刚好看到从RC1版开始 ASP.NET MVC Futures中提供了几个支持异步的类. 相关的类包括AsyncActionDescriptor.AsyncController.AsyncControllerActionInvoker.AsyncManager.AsyncResultWrapper.AsyncTimeoutAttribute.NoAsyncTimeou

Contoso 大学 - 1 - 为 ASP.NET MVC 应用程序创建 EF 数据模型

原文 Contoso 大学 - 1 - 为 ASP.NET MVC 应用程序创建 EF 数据模型 原文地址:Creating an Entity Framework Data Model for an ASP.NET MVC Application (1 of 10)   Contoso 大学 Web 示例应用演示了如何使用 EF 技术创建 ASP.NET MVC 应用.示例中的 Contoso 大学是虚构的.应用包括了类似学生注册.课程创建以及教师分配等功能. 这个系列教程展示了创建 Cont

使用ASP.NET 2.0中的GridView控件

asp.net|控件 在ASP.NET 2.0中,加入了许多新的功能和控件,相比asp.net 1.0/1.1,在各方面都有了很大的提高.其中,在数据控件方面,增加了不少控件,其中的gridview控件功能十分强大.在本文中,将一步步以实际例子为读者介绍asp.ne 2.0中gridview控件的简单使用. 用过asp.net 1.0/1.1的朋友或者也感觉到,其中的datagrid控件功能是十分强大而且实用的,但随之而来的问题是,感觉在操作上依然不大方便,比如要用ado.net写数据的连接,绑