效果图
页面展示HTML
<% List<DealMvc.Reception.Controllers.GoodsController.ZDYshuxing> ZDYshuxingList = (List<DealMvc.Reception.Controllers.GoodsController.ZDYshuxing>)ViewData["ZDYList"]; %>
<%foreach (DealMvc.Reception.Controllers.GoodsController.ZDYshuxing _ZDYshuxing in ZDYshuxingList)
{
ArrayList arrzdy = new ArrayList();
%>
<li class="zdyDiv">
<h5 class="name"><%=_ZDYshuxing.name%>:</h5>
<div class="content">
<a cname="<%=_ZDYshuxing.name%>" class='CP <%=_ZDYshuxing.select ? "" : "a_now"%>' cval="">不限</a>
<%foreach (DealMvc.Reception.Controllers.GoodsController.ZDYshuxing _ZDYshuxing2 in _ZDYshuxing.ZDYshuxingList)
{
if (_ZDYshuxing2.select)
{
arrzdy.Add(_ZDYshuxing.name + "|" + _ZDYshuxing2.name);
}
%>
<a cname="<%=_ZDYshuxing.name%>" class='CP <%=_ZDYshuxing2.select ? "a_now" : ""%>' cval="<%=_ZDYshuxing2.name%>"><%=_ZDYshuxing2.name%></a>
<%} %>
<input type="hidden" name="GoodsGg" value="<%=arrzdy.Count>0?arrzdy.JArrayListToString(",", false):""%>"/>
</div>
</li>
<%} %>
JS代码
$(function () {
//自定
$(".zdyDiv a").each(function (i, v) {
$(v).click(function () {
var val = $(this).attr("cval");
//获取原来的值
var v_this_old = $(this).parent().find("input[type='hidden']").val();
//获取当前的文本
var v_danqianval = $.trim($(this).text());
if (v_this_old == "" && v_danqianval != "不限") {
$(this).parent().find("input[type='hidden']").val($(this).attr("cname") + "|" + v_danqianval);
}
else {
if (v_danqianval == "不限") {
$(this).parent().find("input[type='hidden']").val(""); //"" or i_string 全部的自定义属性,空也是全部
} else {
var str = v_this_old.split(",");
var arrlist = new Array();
var v_bool = true;
for (var i_str = 0; i_str < str.length; i_str++) {
if ($(this).attr("cname") + "|" + v_danqianval == str[i_str]) {
v_bool = false; //如果再次点击,已存在值的话,false表示不再追加值
} else {
arrlist.push(str[i_str]);
}
}
if (v_bool)
$(this).parent().find("input[type='hidden']").val(v_this_old + "," + $(this).attr("cname") + "|" + v_danqianval); //继续加值
else {
//arrlist.length == 0("" or i_string)
$(this).parent().find("input[type='hidden']").val(arrlist.length == 0 ? "" : arrlist.join(",").toString());
}
}
}
$(".FrmShopGoodsListSort").submit();
});
});
});
代码SQL查询区域
//第一
string[] GoodsGg,//规格
//处理传值
ArrayList ayyGgList = new ArrayList();
if (GoodsGg != null && GoodsGg.Length > 0)
{
int ii = 0;//zdyval=a1|b1&zdyval=a1|b2 zdyval=a1|b1,a1|b2,a1|b1,a1|b2
foreach (string _item in GoodsGg)
{
ii++;
string c_item = _item.ToString2Trim();
if (string.IsNullOrEmpty(c_item))
continue;
string[] str = c_item.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
if (str.Length == 0)
continue;
switch (str.Length)
{
case 1:
if (ayyGgList.Contains(str[0].ToString2Trim()))
continue;
ayyGgList.Add(str[0]);
break;
default:
foreach (string itemv in str)
{
if (string.IsNullOrEmpty(itemv.ToString2Trim()))
continue;
ii = ii + 1;
if (ayyGgList.Contains(itemv.ToString2Trim()))
continue;
ayyGgList.Add(itemv);
}
break;
}
}
}
//string swhere = where;
//【修改】
if (ayyGgList.Count > 0)
{
//B[Type=string] - 属性选择集合值
where += new Class1().s(ayyGgList.JArrayListToString(), "B");
}
处理前台选中函数
#region 自定义属性
if (!BrandEntityCk.IsNull)
{
List ZDYList = GetZDYlistByID(BrandEntityCk.Get类型规格List().List);
for (int i = 0; i < ZDYList.Count; i++)
{
for (int u = 0; u < ZDYList[i].ZDYshuxingList.Count; u++)
{
string val = ZDYList[i].ZDYshuxingList[u].name;
if (GoodsGg != null && GoodsGg.Length > 0)
foreach (string item in GoodsGg)
{
ArrayList listarry = new ArrayList();
string[] str = item.Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries);
foreach (string itemv in str)
{
if (string.IsNullOrEmpty(itemv.ToString2Trim()))
continue;
listarry.Add(itemv);
}
if (!(listarry.Contains((ZDYList[i].name + "|" + val))))
continue;
ZDYList[i].ZDYshuxingList[u].select = true;
ZDYList[i].select = true;
}
}
}
ViewData["ZDYList"] = ZDYList;
}
#endregion
辅助方法
//【存储方式】商品字段[B]如:陕西|凉皮,成都|麻辣串,陕西|冰峰
//获取页面的属性值 例如:Customs_2012317141628346652722_4
for (int i = 0; i < _NVC.AllKeys.Length; i++)
{
string key = _NVC.AllKeys[i].ToString2();
string value = _NVC[key].ToString2();
if (key.IndexOf("Customs_") == 0)
{
string[] key_s = key.Split('_');
if (key_s.Length != 3) continue;
if (string.IsNullOrEmpty(value))
continue;
XShop_ProductTypesCustoms _mptc = XShop_ProductTypesCustoms.GetModel(key_s[2].ToInt32());
if (_mptc.IsNull)
continue;
if (_mptc.PTC_UseCate == "供网站填写_会员查看")
nes.Add(_mptc.PTC_Title.ToString2Trim() + "|" + value.ToString2Trim());
Model.XShop_ProductAttributeParameter _XShop_ProductAttributeParameter = new Model.XShop_ProductAttributeParameter();
_XShop_ProductAttributeParameter.PAP_UniqueID = Common.Globals.CreateNewUniqueID();
_XShop_ProductAttributeParameter.Product_UniqueID = m_GoodsLibrary.UniqueID;
_XShop_ProductAttributeParameter.PAP_Name = _mptc.PTC_Title;
_XShop_ProductAttributeParameter.PAP_Value = value;
_XShop_ProductAttributeParameter.PAP_Sort = 0;
_XShop_ProductAttributeParameter.A = _mptc.PTC_UniqueID;
_XShop_ProductAttributeParameter.Add(_STE);
}
}
m_GoodsLibrary.B = nes.Count > 0 ? nes.JArrayListToString(",", true) : "";//属性选择集合值
/// 图片分类同or不同and【修改】
///
/// 根据图片分类获取其自定义属性
///
///
///
public List GetZDYlistByID(List GoodsGgList)
{
List _PropertyList = new List();
foreach (XShop_ProductTypesCustoms _item in GoodsGgList)
{
ZDYshuxing _ZDYshuxing = new ZDYshuxing();
_ZDYshuxing.id = _item.id ?? 0;
_ZDYshuxing.name = _item.PTC_Title.ToString2Trim();
foreach (string _CustomProperties2 in _item.PTC_Value.Split(new string[] { "," }, StringSplitOptions.RemoveEmptyEntries))
{
ZDYshuxing _ZDYshuxing2 = new ZDYshuxing();
_ZDYshuxing2.id = 0;
_ZDYshuxing2.name = _CustomProperties2.ToString2Trim();
_ZDYshuxing.ZDYshuxingList.Add(_ZDYshuxing2);
}
_PropertyList.Add(_ZDYshuxing);
}
return _PropertyList;
}
public class ZDYshuxing
{
public int id { get; set; }
public string name { get; set; }
public bool select = false;
public List ZDYshuxingList = new List();
}
private class Class1
{
public class splitmodel
{
public string N { get; set; }//陕西
public string V { get; set; }//凉皮
}
public class Vmodel
{
public string Vb { get; set; }
}
public class NvModels
{
public string N { get; set; }
private List _VmodelList = new List();
public List VmodelList
{
set { _VmodelList = value; }
get { return _VmodelList; }
}
}
public string s(string szshus, string tableName)
{
List splitmodelList = new List();
string[] szshu = szshus.Split(',');//"陕西|凉皮,成都|麻辣串,陕西|冰峰".Split(',');
foreach (string item in szshu)
{
string[] szshuw = item.Split('|');
if (szshuw.Length != 2)//如果不是“陕西|凉皮”格式就跳出
continue;
splitmodel sa = splitmodelList.Find(t =>
t.N == szshuw[0].ToString2() &&
t.V == szshuw[1].ToString2());//判断是否存在“陕西|凉皮”
if (sa != null)//如果存在就跳出。不再次添加
continue;
splitmodelList.Add(new splitmodel()
{
N = szshuw[0].ToString2(),
V = szshuw[1].ToString2()
});//否则,添加
}
List NvModelsList = new List();
foreach (splitmodel item in splitmodelList)
{
NvModels _NvModels = NvModelsList.Find(t =>
t.N == item.N);//判断”陕西“是否存在,目的在于判断是不是一个属性
if (_NvModels != null)
{
_NvModels.VmodelList.Add(new Vmodel() { Vb = item.V });//存在就添加二级,”西安“
continue;
}
NvModels b_NvModels = new NvModels();
b_NvModels.N = item.N;
b_NvModels.VmodelList.Add(new Vmodel() { Vb = item.V });//如果不存在,就依次添加”陕西“和”西安“
NvModelsList.Add(b_NvModels);
//.VmodelList.Add(new Vmodel() { Vb = item.V });
}
StringBuilder sb = new StringBuilder();
int i = 0;
//AND ( 陕西|凉皮 OR 陕西|凉皮 ) AND 成都|麻辣串
foreach (NvModels itemb in NvModelsList)
{
sb.Append(" AND ");//组合sql
if (itemb.VmodelList.Count > 1)
{
sb.Append(" ( ");
}
//ADN
// 陕西
// 凉皮 OR
// 冰峰
//itemb.N 陕西
int ic = 1;
foreach (Vmodel item in itemb.VmodelList)
{
sb.AppendFormat(" {2} like '%{0}|{1}%' ", new object[]{
itemb.N,item.Vb,tableName
});
//凉皮 //冰峰
if (ic < itemb.VmodelList.Count)// 2
{
sb.Append(" OR ");
}
ic++;
}
if (itemb.VmodelList.Count > 1)
{
sb.Append(" ) ");
}
i++;
}
return sb.ToString();
}
//P
//// and (c) and (c) --> and ((c) or (c))
//List nelwist = new List();
//foreach (MemberGroup item in "陕西|凉皮,成都|麻辣串,陕西|冰峰".Split(','))
//{
// //Member A 不能重复
// Member _Member = nelwist.Find(t => t.A == item.A);
// if (!_Member.IsNull)
// {
// _Member.Blist.add(item.B)
// continue;
// }
// _Member.Blist.add(item.B)
// _Member.Add();
// //
//}
//AND ( 陕西|凉皮 OR 陕西|凉皮 ) AND 成都|麻辣串
//ADN
// 陕西
// 凉皮 OR
// 冰峰
//AND
// 成都
// 麻辣串
}