分页控件为:AspNetPager.dll

我们先建立一个产品属性名称表

CREATE TABLE ProductAttr
(
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[ParentID] [int] NULL,
[Kind] [int] NULL,
[CNName] [nvarchar](50) NOT NULL,
[ENName] [nvarchar](50) NOT NULL,
[Sort] [int] NOT NULL,
[AddTime] [datetime],
)

再建一个属性内容表

CREATE TABLE ProductAttrInfo
(
[ID] [int] IDENTITY(1,1) NOT NULL primary key,
[ParentID] [int] NULL,
[CNName] [nvarchar](50) NOT NULL,
[Sort] [int] NOT NULL,
[AddTime] [datetime] NOT NULL,
[Color] [nvarchar](50) NULL,
)

产品表叫Product

页面呈现效果为:

其中的产品分类、形状、其他为动态的产品属性名称,对象相关的属性内容。

我们首页要把相关的内容绑定,然后再根据传参,把相关的属性编号和内容编号,通过正则的方式找出来,然后把当前也是和属性内容的ID找出来,方便我们查询产品。

/// <summary>
/// 通过正则,把相关的属性ID拿到,然后判断属性名称ID的值即为属性值的ID值
/// </summary>
/// <param name="ids"></param>
/// <returns></returns>
protected int getAttrSql(int ids)
{
int value = ;
string url = Request.Url.ToString().ToLower();
if (url.IndexOf("?") >= )
{
string index = url.Remove(, url.IndexOf("?") + );
string para = index.Replace("?", "");
//切割成一个一个的参数并转换成SQL语句
string[] ps = para.Split('&');
string sql = "";
for (int i = ; i < ps.Length; i++)
{
string s = ps[i];
//检查参数是否是p\d*=\d*开头的,如果是则认为这个参数是属性的参数
if (System.Text.RegularExpressions.Regex.IsMatch(s, @"p\d{1,}=\d{1,}"))
{
//去掉p切割成数字
string[] pp = s.Replace("p", "").Split('=');
int c = int.Parse(pp[].ToString());
if (c == ids)
{
value = int.Parse(pp[].ToString());
break;
}
}
}
}
return value;
}
/// <summary>
/// 绑定相关属性名称和内容,其中参数one和two,我这里是一级二级产品编号,可以忽略,ParentID为一级产品分类的ID,Kind为二级产品分类的ID
/// </summary>
/// <param name="one"></param>
/// <param name="two"></param>
public void BindAttrInfo(Model.ProductType one, Model.ProductType two)
{
StringBuilder sb = new StringBuilder();
//if (two != null)
//{
// List<Model.ProductAttr> list = new BLL.ProductAttr().GetList(0, "CNName,ID", "ParentID=" + one.ID + " and Kind=" + two.ID + "", "Sort desc,AddTime desc");
// foreach (Model.ProductAttr l in list)
// {
// sb.AppendFormat("<dl class=\"clearfix\"><dt>{0}</dt>", l.CNName);
// List<Model.ProductAttrInfo> list2 = new BLL.ProductAttrInfo().GetList(0, "CNName,ID", "Pid=" + l.ID + "", "Sort desc,AddTime desc");
// if (list2.Count > 0)
// {
// sb.AppendFormat("<dd><a href=\"{0}\" {1}>全部</a>", getUrl("p" + l.ID.Value, ""), getAttrSql(l.ID.Value) <= 0 ? "class=\"cur\"" : "");
// foreach (Model.ProductAttrInfo l2 in list2)
// {
// sb.AppendFormat("<a href=\"{0}\" {1}>{2}</a>", getUrl("p" + l.ID.Value, l2.ID.Value.ToString()), getAttrSql(l.ID.Value) == l2.ID.Value ? "class=\"cur\"" : "", l2.CNName);
// }
// sb.AppendFormat("</dd>");
// }
// sb.Append("</dl>");
// }
//}
//else
//{
List<Model.ProductType> twoType = new BLL.ProductType().GetList(, "CNName,ID", "IsPass=1 and Kind=" + one.ID + "", "Sort desc,AddTime desc");
if (twoType.Count > )
{
sb.AppendFormat("<dl class=\"clearfix\"><dt>产品分类</dt><dd>");
sb.AppendFormat("<a {1} href=\"/products/?ParentID={0}\">全部</a>", one.ID, Kind <= ? "class=\"cur\"" : "");
foreach (Model.ProductType l in twoType)
{
sb.AppendFormat("<a href=\"/products/?ParentID={0}&Kind={1}\" {3}>{2}</a>", one.ID.Value, l.ID.Value, l.CNName, Kind == l.ID.Value ? "class=\"cur\"" : "");
}
sb.AppendFormat("</dd></dl>");
}
List<Model.ProductAttr> list = new BLL.ProductAttr().GetList(, "CNName,ID", "ParentID=" + one.ID + " and Kind=0", "Sort desc,AddTime desc");
foreach (Model.ProductAttr l in list)
{
sb.AppendFormat("<dl class=\"clearfix\"><dt>{0}</dt>", l.CNName);
List<Model.ProductAttrInfo> list2 = new BLL.ProductAttrInfo().GetList(, "CNName,ID", "Pid=" + l.ID + "", "Sort desc,AddTime desc");
if (list2.Count > )
{
sb.AppendFormat("<dd><a href=\"{0}\" {1}>全部</a>", getUrl("p" + l.ID.Value, ""), getAttrSql(l.ID.Value) <= ? "class=\"cur\"" : "");
foreach (Model.ProductAttrInfo l2 in list2)
{
sb.AppendFormat("<a href=\"{0}\" {1}>{2}</a>", getUrl("p" + l.ID.Value, l2.ID.Value.ToString()), getAttrSql(l.ID.Value) == l2.ID.Value ? "class=\"cur\"" : "", l2.CNName);
}
sb.AppendFormat("</dd>");
}
sb.Append("</dl>");
}
// }
Lit_ProductAttrList.Text = sb.ToString();
}
/// <summary>
/// 绑定产品
/// </summary>
public void BindProducts()
{
string where = "ParentID=" + ParentID + "";
if (Kind > )
{
where += " and Kind=" + Kind + ""; where += GetWhereAttr();
}
else
{

where += GetWhereAttr();
} string strOrder = "Sort desc,AddTime desc";
if (OrderBy == )
{
strOrder = "SaleNum desc,Sort desc,AddTime desc";
}
else if (OrderBy == )
{
strOrder = "SalPrice,Sort desc,AddTime desc";
} Model.PageData<Model.Product> data = new BLL.Product().GetList(, base.PageIndex, "", where, strOrder);
repList.DataSource = data.DataSoure;
repList.DataBind();
pgServer.RecordCount = data.Count;
pgServer.UrlRewritePattern = getUrl("", "").Replace("#pro-list", "") + "&page={0}#pro-list";
pgServer.PageSize = ;
AllCount = data.Count;
AllPage = data.PageCount;
ThisPage = base.PageIndex;
if (ThisPage < )
{
ThisPage = ;
}
if (AllPage == )
{
ThisPage = ;
}
pgServer.DataBind(); }
/// <summary>
/// 获取Url
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
/// <returns></returns>
protected string getUrl(string name, string value)
{
string url = System.Text.RegularExpressions.Regex.Replace(Request.Url.Query.Trim(), @"^\?", "");
url = System.Text.RegularExpressions.Regex.Replace(url, "^" + name + "=.*?&|" + name + "=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}" + name + "=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
url = System.Text.RegularExpressions.Regex.Replace(url, "^page=.*?&|page=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}page=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
if (url.Trim() == "")
{
return "/products/?" + name + "=" + value + "#pro-list";
}
return getReplaceUrl("/products/?" + name + "=" + value + "&" + url.Replace("#pro-list", "") + "#pro-list", "key");
}
/// <summary>
/// 获取Url
/// </summary>
/// <param name="name"></param>
/// <param name="value"></param>
/// <returns></returns>
protected string getReplaceUrl(string url, string name)
{
url = System.Text.RegularExpressions.Regex.Replace(url, "^" + name + "=.*?&|" + name + "=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
url = System.Text.RegularExpressions.Regex.Replace(url, "^page=.*?&|page=.*?&", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase);
url = System.Text.RegularExpressions.Regex.Replace(url, "&{0,1}page=.*", "", System.Text.RegularExpressions.RegexOptions.IgnoreCase); return url;
}
/// <summary>
/// 获取属性条件-绑定
/// </summary>
/// <returns></returns>
protected string GetWhereAttr(string where)
{
string value = "";
string url = Request.Url.ToString().ToLower();
if (url.IndexOf("?") >= )
{
string index = url.Remove(, url.IndexOf("?") + );
string para = index.Replace("?", "");
//切割成一个一个的参数并转换成SQL语句
string[] ps = para.Split('&');
string sql = "";
for (int i = ; i < ps.Length; i++)
{
string s = ps[i];
//检查参数是否是p\d*=\d*开头的,如果是则认为这个参数是属性的参数
if (System.Text.RegularExpressions.Regex.IsMatch(s, @"p\d{1,}=\d{1,}"))
{
//去掉p切割成数字
string[] pp = s.Replace("p", "").Split('=');
int c = int.Parse(pp[].ToString());
//c为属性内容的编号,根据程序自己做判断
}
}
}
return value;
}

ASP.NET 动态属性筛选和分页绑定的更多相关文章

  1. Working with Data » Getting started with ASP.NET Core and Entity Framework Core using Visual Studio » 排序、筛选、分页以及分组

    Sorting, filtering, paging, and grouping 7 of 8 people found this helpful By Tom Dykstra The Contoso ...

  2. [渣译文] 使用 MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页

    这是微软官方教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第三篇:排序.筛选和分页 原文:Sort ...

  3. EntityFramework_MVC4中EF5 新手入门教程之三 ---3.排序、 筛选和分页

    在前面的教程你实施了一套基本的 CRUD 操作,为Student实体的 web 页.在本教程中,您将添加排序. 筛选和分页到 StudentsIndex的功能.您还将创建一个页面,并简单分组. 下面的 ...

  4. ASP.NET MVC利用PagedList分页(二)PagedList+Ajax+JsRender

    (原文) 昨天在ASP.NET MVC利用PagedList分页(一)的 最后一节提到,一个好的用户体验绝对不可能是点击下一页后刷新页面,所以今天来说说利用Ajax+PagedList实现无刷新(个人 ...

  5. MVC 5 的 EF6 Code First 入门 系列:排序、筛选和分页

    这是微软官方SignalR 2.0教程Getting Started with Entity Framework 6 Code First using MVC 5 系列的翻译,这里是第三篇:排序.筛选 ...

  6. ASP.NET Core MVC/WebAPi 模型绑定探索

    前言 相信一直关注我的园友都知道,我写的博文都没有特别枯燥理论性的东西,主要是当每开启一门新的技术之旅时,刚开始就直接去看底层实现原理,第一会感觉索然无味,第二也不明白到底为何要这样做,所以只有当你用 ...

  7. ASP.NET MVC学习之模型绑定(1)

    一.前言 下面我们将开始学习模型绑定,通过下面的知识我们将能够理解ASP.NET MVC模型的模型绑定器是如何将http请求中的数据转换成模型的,其中我们重点讲述的是表单数据. 二.正文 1.简单类型 ...

  8. ASP.NET MVC- 使用PageList.Mvc分页

    ASP.NET MVC中进行分页的方式有多种,在NuGet上有提供使用PagedList.PagedList.Mvc进行分页. 1. 通过NuGet引用PagedList.Mvc 在安装引用Paged ...

  9. Asp.net Mvc 中的模型绑定

    asp.net mvc中的模型绑定可以在提交http请求的时候,进行数据的映射. 1.没有模型绑定的时候 public ActionResult Example0() { ) { string id ...

随机推荐

  1. iOS便捷开发工具分享

    项目/代码优化工具 1.objec_dep,可以了解项目中各个类的关联信息,了解项目中无效文件,知道双向应用的文件. 下载地址: https://github.com/nst/objc_dep 2.b ...

  2. 查看linux内存、cpu

    1.查看cpu数 多核cpu,包括物理多核和逻辑多核,一台机器可能有多个cpu,每个cpu可能有多核的,多个可能包括物理多核和逻辑多核. /proc/cpuinfo 文件里记录了这些信息,以下是一个核 ...

  3. 正在执行的SQL和之前执行的SQL

    SQL> select * from v$mystat where rownum<2; SID STATISTIC# VALUE ---------- ---------- ------- ...

  4. OOD/DDP 中的 SRP 原则

    单一职责原则 SRP(The Single Responsibility Principle):一个类应该只有一个发生变化的原因.这里的变化指职责的变化. SRP 很好理解,它的要求是 让一个类只做一 ...

  5. bzoj1009

    设f[i,j]为准考证号上第i位匹配到不吉祥数字第j位的方案数,显然j∈[0,m-1]下面我们就要想到怎么把f[i-1]转移到f[i]也就是当前匹配到第k位,那么下一位可能会匹配到哪一位显然我们可以穷 ...

  6. RC滤波器

    1.一阶RC低通滤波器 RC低通滤波器的电路及其幅频.相频特性如下图所示,输入电压为ex,输出电压为ey 其中ζ=RC,截止频率f=1/2πRC. 2.一阶RC高通滤波器 其中ζ=RC,截止频率f=1 ...

  7. HDU 4720 Naive and Silly Muggles 2013年四川省赛题

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4720 题目大意:给你四个点,用前三个点绘制一个最小的圆,而这三个点必须在圆上或者在圆内,判断最一个点如 ...

  8. 《University Calculus》-chape5-积分法-积分的定义

    这一章节讨论积分的定义以及微积分基本定理. 笔者先前在数学证明专栏中关于高斯定理的证明的开头,给出了一段关于微积分思想的概括,文中提到根据导数(微分)的定义,根据其逆定义来给出积分的定义和计算方法,这 ...

  9. iptables vpn

  10. win2008 ent r2 开启端口

    你好.win2008r2 ent 可以用以下命令行来实现,当然也可以用防火墙来配置 比如打开8080端口方法如下: netsh firewall add portopening TCP 8080 My ...