代码改变世界

Asp.net MVC使用MvcPager进行分页

2011-02-27 19:33  夜雨瞳  阅读(3172)  评论(0编辑  收藏  举报

一、数据库表

CREATE TABLE [dbo].[T_Class](
	[ID] [int] NOT NULL,
	[Name] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
 CONSTRAINT [PK_T_Class] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

CREATE TABLE [dbo].[T_Teacher](
	[ID] [int] NOT NULL,
	[Name] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[Address] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[Phone] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[Email] [nvarchar](max) COLLATE Chinese_PRC_CI_AS NOT NULL,
	[ClassID] [int] NOT NULL,
 CONSTRAINT [PK_T_Teacher] PRIMARY KEY CLUSTERED 
(
	[ID] ASC
)WITH (PAD_INDEX  = OFF, IGNORE_DUP_KEY = OFF) ON [PRIMARY]
) ON [PRIMARY]

GO
ALTER TABLE [dbo].[T_Teacher]  WITH CHECK ADD  CONSTRAINT [FK_ClassTeacher] FOREIGN KEY([ClassID])
REFERENCES [dbo].[T_Class] ([ID])
GO
ALTER TABLE [dbo].[T_Teacher] CHECK CONSTRAINT [FK_ClassTeacher]

二、数据库数据

insert into T_Class(ID,Name)values(1,'化学1班');
insert into T_Class(ID,Name)values(2,'化学2班');
insert into T_Class(ID,Name)values(3,'计算机1班');
insert into T_Class(ID,Name)values(4,'计算机2班');
insert into T_Class(ID,Name)values(5,'机械自动化1班');
insert into T_Class(ID,Name)values(6,'机械自动化2班');
insert into T_Class(ID,Name)values(7,'生物1班');
insert into T_Class(ID,Name)values(8,'生物2班');
insert into T_Class(ID,Name)values(9,'金融1班');
insert into T_Class(ID,Name)values(10,'金融2班');
insert into T_Class(ID,Name)values(11,'美术1班');
insert into T_Class(ID,Name)values(12,'美术2班');

insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(1,'陈春','江苏省','15820713331','cc@qq.com',1);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(2,'刘华','河南省','15820713332','lh@qq.com',2);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(3,'李江东','黑龙江','15820713333','ljd@qq.com',3);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(4,'叶天问','山东省','15820713334','ytw@qq.com',4);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(5,'杨海天','河北省','15820713335','sht@qq.com',5);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(6,'朱晓红','宁夏','15820713336','zxh@qq.com',6);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(7,'张天','新疆','15820713337','zt@qq.com',7);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(8,'郭静','广西省','15820713338','gj@qq.com',8);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(9,'周星星','广东省','15820713339','zxx@qq.com',9);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(10,'黄工','安徽省','15820713310','hg@qq.com',10);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(11,'胡友意','福建省','15820713311','hyy@qq.com',11);
insert into T_Teacher(ID,Name,Address,Phone,Email,ClassID)
values(12,'萧景','西藏','15820713312','xj@qq.com',12);

三、建立Linq

四、在Model创建ClassInformation

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace _20110223mvc.Models
{
    public class ClassInformation
    {
        public int ID { get; set; }
        public int ClassID { get; set; }
        public string Name { get; set; }
        public string TeacherName { get; set; }
        public string Address { get; set; }
        public string Phone { get; set; }
        public string Email { get; set; }
    }
}

五、在Controllers创建Page控制器

添加MvcPager.dll,并引用MvcPager的命名空间Webdiyer.WebControls.Mvc。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

using _20110223mvc.Models;
//linq实体命名空间
using _20110223mvc.Models.LinqEntities;

//MvcPager.dll分页命名空间
using Webdiyer.WebControls.Mvc;

namespace _20110223mvc.Controllers
{
    public class PageController : Controller
    {
        //
        // GET: /Page/
        //默认分页
        private const int defaultPageSize = 5;

        //
        public ActionResult Index(int? id)
        {
            using (DBDataContext db = new DBDataContext())
            {
                IQueryable<ClassInformation> p = from c in db.T_Class
                        from d in db.T_Teacher
                        where c.ID == d.ClassID
                        select new ClassInformation { ID = c.ID, ClassID = d.ClassID, Name = c.Name, TeacherName = d.Name, Address = d.Address, Phone = d.Phone, Email = d.Email };
                PagedList<ClassInformation> m = p.ToPagedList(id ?? 1, defaultPageSize);
                return View(m);
            }
        }

        public ActionResult Edit(int id)
        {
            using (DBDataContext db = new DBDataContext())
            {
                IQueryable<ClassInformation> p = from c in db.T_Class
                        from d in db.T_Teacher
                        where c.ID == d.ClassID && c.ID==id 
                        select new ClassInformation { ID = c.ID, ClassID = d.ClassID, Name = c.Name, TeacherName = d.Name, Address = d.Address, Phone = d.Phone, Email = d.Email };
                ClassInformation k = p.Single();
                ViewData["k"] = k;
                return View();
            }
        }

        [AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Edit()
        {
            using (DBDataContext db = new DBDataContext())
            {
                T_Class q = db.T_Class.Where(o => o.ID == int.Parse(Request.Form["ID"])).Single();
                q.Name = Request.Form["Name"];
                T_Teacher p = db.T_Teacher.Where(o => o.ClassID == int.Parse(Request.Form["ID"])).Single();
                p.Name = Request.Form["TeacherName"];
                p.Phone = Request.Form["Phone"];
                p.Address = Request.Form["Address"];
                p.Email = Request.Form["Email"];
                db.SubmitChanges();
                return RedirectToAction("Index");
            }
        }

        public ActionResult Delete(int id)
        {
            using (DBDataContext db = new DBDataContext())
            {
                T_Class p = db.T_Class.Single(q => q.ID == id);
                T_Teacher teacher = db.T_Teacher.Single(q => q.ClassID == id);
                db.T_Class.DeleteOnSubmit(p);
                db.T_Teacher.DeleteOnSubmit(teacher);
                db.SubmitChanges();
            }
            return RedirectToAction("Index");
        }
    }
}

六、添加视图Index和Edit.

Index:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage<PagedList<ClassInformation>>" %>

<%@ Import Namespace="_20110223mvc" %>
<%@ Import Namespace="_20110223mvc.Models" %>
<%@ Import Namespace="Webdiyer.WebControls.Mvc" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>asp.net MVC分页</title>
    <%--样式表--%>
    <link href="http://www.cnblogs.com/Content/Site.css" rel="stylesheet" type="text/css" />
    <%--JQuery和Ajax--%>
    <%--<script src="http://www.cnblogs.com/Scripts/MicrosoftAjax.js" type="text/javascript"></script>--%>
    <script src="http://www.cnblogs.com/Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <%--<script src="http://www.cnblogs.com/Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>--%>
</head>
<body>
    <div class="divfloat">
        <div id="divpages">
            <table>
                <tr>
                    <th>
                        班级
                    </th>
                    <th>
                        老师
                    </th>
                    <th>
                        地址
                    </th>
                    <th>
                        电话号码
                    </th>
                    <th>
                        邮箱
                    </th>
                    <th>
                        操作
                    </th>
                </tr>
                <%foreach (ClassInformation od in Model)
                  {
                %>
                <tr>
                    <td>
                        <%=od.Name.ToString() %>
                    </td>
                    <td>
                        <%=od.TeacherName.ToString() %>
                    </td>
                    <td>
                        <%=od.Address.ToString() %>
                    </td>
                    <td>
                        <%=od.Phone.ToString() %>
                    </td>
                    <td>
                        <%=od.Email.ToString() %>
                    </td>
                    <td>
                        <%= Html.ActionLink("编辑", "Edit", new { id=od.ID })%>
                        <%= Html.ActionLink("删除", "Delete", new { id = od.ID })%>
                    </td>
                </tr>
                <%
                    } %>
            </table>
            <%--                   <%=Html.AjaxPager(Model, new PagerOptions() { 
    CssClass = "pages", 
PageIndexParameterName = "id", 
ShowMorePagerItems = false,
FirstPageText = "首页",
LastPageText = "末页",
PrevPageText = "上一页",
NextPageText = "下一页",
CurrentPagerItemWrapperFormatString = "<span class=\"cpb\">{0}</span>",
ShowPageIndexBox = true,
NumericPagerItemWrapperFormatString = "<span class=\"item\">{0}</span>"
},
    new AjaxOptions() { UpdateTargetId = "divpages" })%>--%>
            <%=Html.Pager(Model, new PagerOptions
{
    PageIndexParameterName = "id",
    CssClass = "pages",
    FirstPageText = "首页",
    LastPageText = "末页",
    PrevPageText = "上一页",
    NextPageText = "下一页",
    CurrentPagerItemWrapperFormatString = "<span class=\"cpb\">{0}</span>",
    ShowPageIndexBox = true,
    NumericPagerItemWrapperFormatString = "<span class=\"item\">{0}</span>",
    PageIndexBoxType = PageIndexBoxType.DropDownList, 

    ShowGoButton = false,PageIndexBoxWrapperFormatString=" 转到{0}",SeparatorHtml = "" })%>
        </div>
    </div>
</body>
</html>

Edit:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %>

<%@ Import Namespace="_20110223mvc.Models" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>修改个人信息</title>
    <style type="text/css">
        dt
        {
            float:left;
        }
        dd
        {
            margin:15px 0px 15px 100px;
        }
    </style>
</head>
<body>
    <div>
        <% ClassInformation k = ViewData["k"] as ClassInformation; %>
        <% Html.BeginForm("Edit", "Page", FormMethod.Post); %>
        <%=Html.Hidden("ID",k.ID ) %>
        <dl>
            <dt>
                <label>
                    班级</label></dt>
            <dd>
                <%=Html.TextBox("Name",k.Name) %></dd>
            <dt>
                <label>
                    老师</label></dt>
            <dd>
                <%=Html.TextBox("TeacherName",k.TeacherName) %></dd>
            <dt>
                <label>
                    地址</label></dt>
            <dd>
                <%=Html.TextBox("Address",k.Address) %></dd>
            <dt>电话号码</dt>
            <dd>
                <%=Html.TextBox("Phone",k.Phone) %></dd>
            <dt>邮箱</dt>
            <dd>
                <%=Html.TextBox("Email",k.Email) %></dd>
        </dl>
        <input type="submit" value="保存" />
        <input type ="button"" value="返回" onclick="document.location.href= 'http://www.cnblogs.com/Page/Index'" />
    </div>
</body>
</html>

七、运行效果

八、总结

MvcPager功能挺强大的,资料也相当地丰富。

MvcPager下载网址:http://mvcpager.codeplex.com/releases/view/47201

Demo的示例网址:http://en.webdiyer.com/

九、下载相关

MvcPager.dll下载:https://files.cnblogs.com/yongfeng/MvcPager.rar

源代码下载:https://files.cnblogs.com/yongfeng/20110223mvc.rar