啤酒&灵感

在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,

我弄了很久才解决,头大!

不行了,喝了啤酒头晕,虽然不能很优雅的解决这个问题,但毕竟还是实现了嘛~

 

期待更好的解决办法!

posted @ 2010-06-20 00:06  码农SeraphWU  阅读(167)  评论(0编辑  收藏  举报