ASP.NET动态属性筛选和分页绑定

王朝学院·作者佚名  2016-08-27
窄屏简体版  字體: 小  |  中  |  大  |  超大  

分页控件为:aspNetPager.dll

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

CREATETABLEPRoductAttr

([ID][int]IDENTITY(1,1)NOTNULLprimarykey,[ParentID][int]NULL,[Kind][int]NULL,[CNName][nvarchar](50)NOTNULL,[ENName][nvarchar](50)NOTNULL,[Sort][int]NOTNULL,[AddTime][datetime],

)

再建一个属性内容表

CREATETABLEProductAttrInfo

([ID][int]IDENTITY(1,1)NOTNULLprimarykey,[ParentID][int]NULL,[CNName][nvarchar](50)NOTNULL,[Sort][int]NOTNULL,[AddTime][datetime]NOTNULL,[Color][nvarchar](50)NULL,

)

产品表叫Product

页面呈现效果为:

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

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

///<summary>///通过正则,把相关的属性ID拿到,然后判断属性名称ID的值即为属性值的ID值///</summary>///<param name="ids"></param>///<returns></returns>protectedintgetAttrSql(intids)

{intvalue =0;stringurl =Request.Url.ToString().ToLower();if(url.IndexOf("?") >=0)

{stringindex = url.Remove(0, url.IndexOf("?") +1);stringpara = index.Replace("?","");//切割成一个一个的参数并转换成SQL语句string[] ps = para.Split('&');stringsql ="";for(inti =0; i < ps.Length; i++)

{strings =ps[i];//检查参数是否是p\d*=\d*开头的,如果是则认为这个参数是属性的参数if(System.Text.RegularExpressions.Regex.IsMatch(s,@"p\d{1,}=\d{1,}"))

{//去掉p切割成数字string[] pp = s.Replace("p","").Split('=');intc =int.Parse(pp[0].ToString());if(c ==ids)

{

value=int.Parse(pp[1].ToString());

break;

}

}

}

}returnvalue;

}

///<summary>///绑定相关属性名称和内容,其中参数one和two,我这里是一级二级产品编号,可以忽略,ParentID为一级产品分类的ID,Kind为二级产品分类的ID///</summary>///<param name="one"></param>///<param name="two"></param>publicvoidBindAttrInfo(Model.ProductType one, Model.ProductType two)

{

StringBuilder sb=newStringBuilder();//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 =newBLL.ProductType().GetList(0,"CNName,ID","IsPass=1 and Kind="+ one.ID +"","Sort desc,AddTime desc");if(twoType.Count >0)

{

sb.AppendFormat("<dl class=\"clearfix\"><dt>产品分类</dt><dd>");

sb.AppendFormat("<a {1} href=\"/products/?ParentID={0}\">全部</a>", one.ID, Kind <=0?"class=\"cur\"":"");foreach(Model.ProductType lintwoType)

{

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 =newBLL.ProductAttr().GetList(0,"CNName,ID","ParentID="+ one.ID +"and Kind=0","Sort desc,AddTime desc");foreach(Model.ProductAttr linlist)

{

sb.AppendFormat("<dl class=\"clearfix\"><dt>{0}</dt>", l.CNName);

List<Model.ProductAttrInfo> list2 =newBLL.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 l2inlist2)

{

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>publicvoidBindProducts()

{stringwhere="ParentID="+ ParentID +"";if(Kind >0)

{where+="and Kind="+ Kind +"";where+= GetWhereAttr();

}else{

where+= GetWhereAttr();

}stringstrOrder ="Sort desc,AddTime desc";if(OrderBy ==1)

{

strOrder="SaleNum desc,Sort desc,AddTime desc";

}elseif(OrderBy ==2)

{

strOrder="SalPrice,Sort desc,AddTime desc";

}

Model.PageData<Model.Product> data =newBLL.Product().GetList(20,base.PageIndex,"",where, strOrder);

repList.DataSource=data.DataSoure;

repList.DataBind();

pgServer.RecordCount=data.Count;

pgServer.UrlRewritePattern= getUrl("1","1").Replace("#pro-list","") +"&page={0}#pro-list";

pgServer.PageSize=20;

AllCount=data.Count;

AllPage=data.PageCount;

ThisPage=base.PageIndex;if(ThisPage <1)

{

ThisPage=1;

}if(AllPage ==0)

{

ThisPage=0;

}

pgServer.DataBind();

}

///<summary>///获取Url///</summary>///<param name="name"></param>///<param name="value"></param>///<returns></returns>protectedstringgetUrl(stringname,stringvalue)

{stringurl = 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";

}returngetReplaceUrl("

/products/?"+ name +"="+ value +"&"+ url.Replace("#pro-list","") +"#pro-list","key");

}///<summary>///获取Url///</summary>///<param name="name"></param>///<param name="value"></param>///<returns></returns>protectedstringgetReplaceUrl(stringurl,stringname)

{

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);returnurl;

}

///<summary>///获取属性条件-绑定///</summary>///<returns></returns>protectedstringGetWhereAttr(stringwhere)

{stringvalue ="";stringurl =Request.Url.ToString().ToLower();if(url.IndexOf("?") >=0)

{stringindex = url.Remove(0, url.IndexOf("?") +1);stringpara = index.Replace("?","");//切割成一个一个的参数并转换成SQL语句string[] ps = para.Split('&');stringsql ="";for(inti =0; i < ps.Length; i++)

{strings =ps[i];//检查参数是否是p\d*=\d*开头的,如果是则认为这个参数是属性的参数if(System.Text.RegularExpressions.Regex.IsMatch(s,@"p\d{1,}=\d{1,}"))

{//去掉p切割成数字string[] pp = s.Replace("p","").Split('=');intc =int.Parse(pp[1].ToString());//c为属性内容的编号,根据程序自己做判断}

}

}returnvalue;

}

 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
© 2005- 王朝網路 版權所有 導航