啤酒&灵感
在ASP.NET里,需要实现的效果是这样的:
从数据库里读取出所有的“商品分类”,比如“A类商品”,“B类商品”,“C类商品”。
然后在页面的上方 动态生成 对应的Button也好,link也好,反正是一系列可以点击的东西,它们的text属性(如果不是服务器端控件,那就是它显示的文字)就是具体的“商品分类”。
接着,点击刚才生成的某个控件,就在页面的中间部分动态加载该“商品分类”里的商品信息。(肯定要用Ajax,最后我用updatepanel实现了)
例如,点击了“A类商品”,那么页面中间部分就动态加载所有属于A类的 商品的信息。
如果用JS,我的想法是:
1,在服务器端 获取所有的分类信息,构造HTML代码输出;
2,用JS获取用户点击元素的text属性,反正就是显示的文字吧,具体叫什么我不知道;
3,JS里应该有个load("xxxx.aspx?id = xx")之类的方法吧?就是在框架里加载页面用的。。。
可问题的关键是 我完全不懂JS,上面的也是乱想而已。。。
吃完晚饭想了2个小时,没搞出来。
确实没办法,只有开瓶啤酒,边喝边看电视。
突然,灵感来了!
想法如下:
先建立一个用户控件,作为显示所有分类的容器。
根据返回的“商品分类” 是泛型,我遍历里面的每个item,在一个panel里动态添加控件,然后设置相关属性:
代码在VSS服务器上,我这里只是模拟一下:
public List<string> ls = new List<string>() { "豆类","海产类","菌类","青菜类","中药类","特价蔬菜"};
int i = 0;
foreach (string s in ls)
{
Button bt = new Button();
bt.ID = i.ToString() + "ID";
bt.CommandName = s;
bt.Text = bt.ID = " ++ " + bt.CommandName;
Panel1.Controls.Add(bt);
bt.Command += new CommandEventHandler(bt_Command);
i++;
}
然后利用 Page.FindControl() 访问主页面里的控件,将选择的类别传递过去。
之后就是常规处理,查询绑定数据之类的。
有个问题绕我纠结了很久,就是 bt.Command += new CommandEventHandler(bt_Command) 绑定了以后不能触发bt_Command,
我弄了很久才解决,头大!
不行了,喝了啤酒头晕,虽然不能很优雅的解决这个问题,但毕竟还是实现了嘛~
期待更好的解决办法!