查无此鸟的博客 一个不误正业的交通工程师的个人网站

ASP.NET编程dropdownlist控件页面刷新选中内容保持不变的方法

标签:野生程序猿 | 发表时间:2020-07-20 17:26:52 | 更新时间: 2020-09-24 12:28:02 | 阅读数:348 | 评论数:0 | 字数:1149

有这样一个需求,在页面上点击查询按钮,根据dropdownlist选中的内容查询数据库中的数据,查询到的数据返回到当前页面的table中。 我采用的方法是这样的,在URL中加入查询字段,加载页面时按URL查询字段写command的查询语句。这时候是可以返回正确的查询结果的,这里没有任何问题。但是页面刷新后dropdownlist会显示默认的项,而非查询前选中的项,这就很反人类了。 很自然的,这时候我们需要写上个什么语句,让dropdownlist的内容显示查询的项,通常想到的是: dropdownlist.text=request.querystring("xxx") 或者: dropdownlist.Items.FindByText(request.querystring("xxx")).Selected=True 上面是从网上找到的方法,看起来很简单。 可是,ASP.NET有个奇怪的特性,就是在使用Response.Redirect重定向到当前页面,首先运行的是Page_Load事件,不管你再在Button_Click里面写什么都没有用。 写到Page_Lode中呢?也没啥用,dropdownlist还是显示默认项。 这个问题困扰了我整个一个周末,到网上搜了好久,也找不到答案。有些人甚至将其归咎于ASP.NET的天生缺陷。 ASP.NET确实不好用,没有JS的加持,简直什么也干不了。 我甚至想到了一个异常复杂的曲线救国方案来解决这个问题,但是测试后仍旧是达不到预想的效果。 简直就要放弃的时候,歪打正着的想到了解决方案,而且确实也很简单: 方法就是把设置dropdownlist选中项的语句写到页面的页面的LoadComplete事件中,也就是等整个页面加载完成,我们再设置dropdownlist的内容。这个方法之前也想到了,只不过当时用的是findbytext,但是总是引起未设置对象什么什么的错误,注意力都放到解决这个错误了。其实,用dropdownlist.text=request.querystring("xxx")就行了。 野生程序猿解决起困难来就是这么漫无目的的佛系为之,可笑加无奈。 但是问题终归是解决了吧,是以记之。
今天(7.15)在写IIS日志查看器的时候,又遇到了这个问题,发现有可能是用的列表控件的item.clear方法导致的问题。因为每次postback,列表控件都会加载一次数据,造成列表内容重复,所以在add item之前使用clear方法清空内容,但是这样就导致了每次postback列表控件内容就会初始化,也就会造成在postback之后不会保持原来选择的内容。解决的办法也相对简单,首先就是不要用clear方法,而是在add item之前使用isPostback判断。

版权声明:本文由@查无此鸟创作,采用知识共享 署名-非商业性使用-禁止演绎 3.0 中国大陆许可协议进行许可。除非注明,均为原创文章,请在转载时注明来源,并完整保留本段声明。本文地址: http://liyonggang.net/blog.aspx?id= 2020-07-20



本文评论:
暂无评论……

发表评论:(昵称或评论内容不允许为空!邮箱可不填,但建议填写以备联系,邮箱将不显示在评论中。) 昵称 邮箱

查无此鸟的博客

Copyright©查无此鸟 2020~2022, All Rights Reserved

邮箱:t5lyg@126.com

其他链接

卢昌海的网站 | 鱼の后花园博客) | 新交通人的技术闲谈-知乎 | FROYOs Blog | 博客园 | 鸟哥Linux | 蜂鸟的小窝 | 大眼仔

AutoCAD.NET: Kevin K | 大非sb