分页控件为: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. asp.net学习

    http://www.cnblogs.com/fish-li/archive/2011/12/27/2304063.html

  2. HDUOJ Clear All of Them I 状压DP

    Clear All of Them I Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 122768/62768 K (Java/Oth ...

  3. SQL server 连接查询

    1.join on     左右拼接查询 2.union 上下拼接    注意:所拼接的列的数据类型要一致

  4. Hibernate之SchemaExport+配置文件生成表结构

    首先要生成表,得先有实体类,以Person.java为例: /** * * @author Administrator * @hibernate.class table="T_Person& ...

  5. iPhone之Quartz 2D系列--图形上下文(2)(Graphics Contexts)

    以下几遍关于Quartz 2D博文都是转载自:http://www.cocoachina.com/bbs/u.php?action=topic&uid=38018 iPhone之Quartz ...

  6. 14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB

    14.6.11 Configuring Optimizer Statistics for InnoDB 配置优化统计信息用于InnoDB 14.6.11.1 Configuring Persisten ...

  7. Apache Hadoop RPC Authentication 安全绕过漏洞

    漏洞名称: Apache Hadoop RPC Authentication 安全绕过漏洞 CNNVD编号: CNNVD-201308-425 发布时间: 2013-08-28 更新时间: 2013- ...

  8. once

    var once = function(obj, evtType, handler) { var f = function() { //console.log(arguments) handler.a ...

  9. Linux学习笔记5——虚拟内存

    一.为什么要有虚拟内存 虚拟内存的提出,是为了禁止用户直接访问物理存储设备,有助于系统稳定. 二.为什么一个程序不能访问另外一个程序的地址指向的空间 1:每个程序的开始地址0x80084000 2:程 ...

  10. 关于android 自己实现 back键 home键

    今天在被问到一个问题的时候突然想要看看这些东西了.因为一直以来,我返回上个界面,和大家普遍的方法都是一样的. 1. finish()本页面. 2. intent 跳转到上个页面. 一 ,在 按下手机上 ...