分页控件为: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. Spring MVC和Struts2的区别

    1. 机制:spring mvc的入口是servlet,而struts2是filter,这样就导致了二者的机制不同. 2. 性能:spring会稍微比struts快.spring mvc是基于方法的设 ...

  2. Hdu5510 Bazinga

    Description Ladies and gentlemen, please sit up straight. Don't tilt your head. I'm serious. For \(n ...

  3. MacOS快捷键

  4. Android 文件上传 使用AsyncHttpClient开源框架

    public void upload(View view) { AsyncHttpClient client = new AsyncHttpClient(); RequestParams reques ...

  5. CAD文件导入AD09

    1.首先将CAD图纸倒出为DXF格式的文件. 2.在altium designer 的pcb编辑中点菜单文件--导入,在弹出的对话框中,选择导入文件的类型,选择 DWG,DXF类型.然后确定,再弹出的 ...

  6. NBU是最牛逼的备份软件

    NBU是最牛逼的备份软件 TSM是IBM的备份   好好看看几个厂商 VERITAS 公司下的NBU入门级备份有BEHP的备份软件有DPIBM的是TSMCommvault也非常牛逼这都是做到了小机AI ...

  7. nbtstat Linux版源码, 通过IP获取主机名

    nbtstat Linux版, 通过IP获取主机名/* NETBIOS name lookup tool - by eSDee of Netric (www.netric.org) * yeh.. i ...

  8. xlslib安装, aclocal-1.13: command not found, 安装升级autoconf-2.65.tar.gz, automake-1.13.tar.gz两个文件

    问题1: $ make CDPATH="${ZSH_VERSION+.}:" && cd . && aclocal-1.13 -I m4 /bin/ ...

  9. Tap.js

    Tap.js A lightweight ‘tap’ event JavaScript plugin

  10. Python IDLE 清屏工具

     转载自:http://www.cnblogs.com/maybego/p/3234055.html   1.下载clearwindow.py(右击-目标另存为,直接点击会打开脚本内容). 2.拷贝c ...