关于asp.net中的listbox有关问题

关于asp.net中的listbox问题
本帖最后由 NotBack 于 2014-05-27 11:41:17 编辑
vs2010开始,我重新看到了MS代码封装的诚意,一切以易用为主。开始使用.net写点工具和管理程序。
但是由于从vb6,asp到现在 的vb.net,asp.net中缺失了不少知识,总有点力不从心,特发帖求教。

关于listbox,listbox的操作有2种方式,前台,后台。
我这里有个实际的应用:

打开日历,遍历当前月,并在某些特殊日期上做好标记
在日历遍历中,根据特殊规则获取特殊日期,加入listbox_auto
选择listbox_auto的内容,显示当前选择项的内容
按按钮button_add,将listbox_auto加入listbox_edit中。

在这个过程中,为了简化不重要的部分,全部采取单选方式.

标准的listbox应用,在page_load中写入  
if not(ispostback) then 

dim _ls as new listitem
_ls.text="XXX"
_ls.value="ooo"
listbox_auto.items.add _ls

end if 
这种方式,添加初始数据后,点button_add 页面自动postback,并且postback后,page_load中添加的数据仍然存在。
显示当前listbox_auto,使用jquery,很容易实现
button_add的click事件中将 listbox_auto的selectdata加入listbox_edit很容易实现。


问题来了:
以上是标准写法。问题是,我是使用calendar控件的的DayRender事件遍历日期,并且添加listbox项目。
当calendar控件在listbox_auto之前,则,listbox中正常出现内容,如果在listbox_auto之后,listbox_auto不出现内容。

更可怕的是,即使出现内容,button_add事件后,listbox_auto内容并未被postback到后一个页面。

分析:
猜测,dayRender事件虽然能把内容添加到listbox_auto中,但是,未能加入隐藏数据中。

问题:
有什么方法能让dayRender事件中添加到Listbox_auto中的数据能自动postback到下个页面去不!!!!

要求:
第一,不是使用数据绑定
第二,尽量使用系统自带功能,非手动扩展类等手段
第三,不考虑前台控制,因为后期我要将list_edit的内容更新入数据库。


------解决方案--------------------
一般用js改变的项,要想获得listbox的值,就要在提交前选将listbox_auto全选(必须设置选中状态),然后再执行提交


后台程序通过用Request["listbox_auto的name"]来获得数据
------解决方案--------------------
如果你习惯VB6的开发方式,你可以使用Extjs。
------解决方案--------------------
猜测,dayRender事件虽然能把内容添加到listbox_auto中,但是,未能加入隐藏数据中。

隐藏数据是什么?
------解决方案--------------------
算了,首先告诉你一个不幸的消息,asp.net自带的Calendar是个垃圾控件,有很多BUG存在,比如不支持ISPOSTBACK,想通过dayRender修改别的控件必须得放之前等,我就是在学的时候点了几下,然后就彻底抛弃它了,可能在VS2008或是1213里没有存在这种BUG了
------解决方案--------------------
引用:
Quote: 引用:

算了,首先告诉你一个不幸的消息,asp.net自带的Calendar是个垃圾控件,有很多BUG存在,比如不支持ISPOSTBACK,想通过dayRender修改别的控件必须得放之前等,我就是在学的时候点了几下,然后就彻底抛弃它了,可能在VS2008或是1213里没有存在这种BUG了


挺好用呵,仍然不支持ispostback , 每次必须重绘,毕竟dayrendar是重绘事件吧。
我用Trace跟踪了一下,dayrendar是在pageload之后触发的,所以一定是additem后,listbox_auto数据未能自动保存以及自动postback,求方法。

vb的精华不在于扩展性多强,而是其自动化过程容易搭车,不在于控件多简陋,而是如何把自己的思路附属到自动化过程中搭车实现。


极大可能我所说的BUG对它来说是故意的,因为我相信MS的开发能力,但绝对不是你说的重绘事件可以跳过ISPOSTBACK,但我就是用不习惯它,好吧,说说你的问题。

你要的功能可能我的理解还是错误,但我理解为:首先listbox有数据,其次用viewstate保存。
listbox你可以在if(!ispostback)里绑定数据源或添加,因为dayrendar事件还有顺序之分,所以我们就认为它只能改自己不能改别的控件,所以别把listbox的绑定和它扯上关系。

其次,viewstate你可以理解为永久存在于客户端的session,你只需要在button事件里viewstate["xxxx"] = b;再取出来时用:
a b = (a)b;
这样就可以了。