Asp.net问题集锦

1.在Web应用开发中经常碰到这样的情况,Dropdownlist绑定的数据太多,用户要选择某一项必须从头找到尾,使用起来很不方便。最近我在工作中就碰到这种情况,公司内某个业务系统需要绑定几百条的厂家信息,用户强烈要求带搜索功能。其实要实现这个功能本身并不难,实现方式也可以有多种,就看哪种方式更优雅了。最简单的方法莫过于在下拉框旁边弄个文本框,再加个按钮啥的,让用户输入选项名称,点击搜索就OK了。但这样的界面也太寒酸了,用户体验不好。最好能有个类似Winform里的Combobox那样的控件,既支持下拉,也可以手动输入。但遗憾的是,asp.net自带的服务器控件没有带这种功能的,HTML控件也没有。咋办呢?其实,Web程序应用了这么多年,肯定有很多开发人员碰到这样的需求,解决方案也不是没有。比如,熟悉MS工具的朋友就知道,ASP.Net AJAX Control Tookit里面就有个ComboBox控件,可以实现下拉框搜索功能。但是,在使用中文的时候有点小麻烦,输入中文搜索时必须频繁切换输入法,用起来挺尴尬的。
其实,还有个比较有名的js界面框架:jQueryEasyUI。这套框架是基于jQuery的,有丰富的界面控件,其中就有个combobox。经过使用发现,它对中文的支持很不错!不过,这些都是HTML控件,想让它跟asp.net服务器控件结合还需要做点工作。直接给出步骤吧:

  1. 在aspx页面内引入相关的js文件和CSS文件。文件具体路径可能有所不同,但要注意js文件引用的先后顺序。

    <script src="../Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
    <script src="/Scripts/jquery.easyui.min.js" type="text/javascript"></script>
    <link href="../Styles/easyui.css" rel="stylesheet" type="text/css" />
    <link href="../Styles/icon.css" rel="stylesheet" type="text/css" />
  2. 为Dropdownlist控件加CSS类easyui-combobox。
    <asp:DropDownList ID="ddlManufacturer" runat="server" AutoPostBack="True" OnSelectedIndexChanged="ddlManufacturer_SelectedIndexChanged"
                                class="easyui-combobox" Width="150px" Height="22px">
                            </asp:DropDownList>
    
  3. 加入js脚本,让下拉框拥有搜索功能。
               //相当于select的onchange事件
                $(‘#<%= ddlManufacturer.ClientID%>‘).combobox({
                    onChange: function (newValue, oldValue) {
                        var count = $("#<%= ddlManufacturer.ClientID%> option").length;
                        var ddlFac = document.getElementById("<%= ddlManufacturer.ClientID%>");
                        for (var i = 0; i < count; i++) {
                            if (ddlFac.options[i].value == newValue) {
                                __doPostBack(‘<%= ddlManufacturer.ClientID%>‘, ‘‘);
                                break;
                            }
                        }
                    }
    
                });
    

这个很重要,有这些脚本才能让下拉框有搜索功能。特别注意javascript代码中的onChange,easyui框架屏蔽了客户端HTML <select>标签的onchange事件,asp.net服务器控件dropdownlist默认的SelectedIndexChanged事件也不会触发了。既然不会触发,当然也不会Postback了。那要与服务器交互怎么办?easyui为我们加了这个:onChange:function(oldValue,newValue)。这个function就是下拉框索引改变时调用的函数。这里又要注意了,由于下拉框支持手动输入文字并自动搜索,只要文字改变就会触发这个事件然后调用那个function,newValue就是改变后的值。这就给回发带来了一点麻烦:我们并不需要文字一改变就回发,而是匹配选项才回发,这就有了代码里的for循环判断。__doPostBack这个函数大家应该不陌生了,asp.net服务器控件向服务器回发用的就是这个函数。这样,就实现了带搜索功能的下拉框。写到这里,大家可能觉得大功告成了。没错,一般情况下,这样就可以使用了。不过,还是有点小问题:当你把这个控件放到UpdatePanel里时,每次一回发,dropdownlist的样式都没了,回到了默认的下拉框状态。这是为什么呢?我觉得是因为UpdatePanel局部刷新,并没有将整个页面重新载入,第三步里js代码就没有执行,所以看不到效果了。解决这个问题有个办法,就是在后台事件处理方法中动态插入javascript代码,将以上javascript代码执行一遍就行啦。

  ScriptManager.RegisterClientScriptBlock(this.Page, this.Page.GetType(), "refreshEasyui",
                     scripts+ " if(window.reRegisterJS != undefined){reRegisterJS();}", true);

scripts就是第三步里的javascript代码。
至此,真的可以告一段落了。大家也可以把它做成用户控件,方便以后重用。有不合理的地方,欢迎 大家和我交流!

时间: 2024-10-10 08:42:31

Asp.net问题集锦的相关文章

大家好

http://www.yugaopian.com/people/259723 http://www.yugaopian.com/people/259744 http://www.yugaopian.com/people/259783 http://www.yugaopian.com/people/259824 http://www.yugaopian.com/people/259839 http://www.yugaopian.com/people/259933 http://www.yugao

阿哥吗卡怪每次哦阿哥看啦过啦嘎开吃麻辣个啊蓝光

http://www.xx186.com/web/web_kpic.asp?id=156613http://www.xx186.com/web/web_kpic.asp?id=156608http://www.xx186.com/web/web_kpic.asp?id=156605http://www.xx186.com/web/web_kpic.asp?id=156602http://www.xx186.com/web/web_kpic.asp?id=156600http://www.xx18

风格更家霍建华

http://www.9ku.com/fuyin/daogaoo.asp?dgid=119864http://www.9ku.com/fuyin/daogaoo.asp?dgid=119867http://www.9ku.com/fuyin/daogaoo.asp?dgid=119876http://www.9ku.com/fuyin/daogaoo.asp?dgid=119879http://www.9ku.com/fuyin/daogaoo.asp?dgid=119883http://www

,了可美军以本合同个v分

http://shike.gaotie.cn/zhan.asp?zhan=%A1%FE%CE%F7%B0%B2%B8%B4%B7%BD%B5%D8%B7%D2%C5%B5%F5%A5%C6%AC%C4%C4%C0%EF%C2%F2Q%A3%BA%A3%B1%A3%B1%A3%B2%A3%B7%A3%B4%A3%B0%A3%B1%A3%B1%A3%B7%A3%B5%A1%F4 http://shike.gaotie.cn/zhan.asp?zhan=%A8%7D%CD%AD%B4%A8%B8%B4

asp.net + mysql + ubuntu 问题集锦

项目环境: asp.net + mysql 不想在PC上安装mysql, 直接使用之前在 Ubuntu 上安装好的Mysql数据库.本文主要会列出在开发过程中遇到的问题,拿出来给大家分享. 至于安装就不多说,可参考:CentOS7 + Apache2.4 + Mysql5.5 + PHP5.5 问题: 场景:宿主机访问虚拟机中的mysql, 安装配置可参考: http://www.2cto.com/database/201305/210279.html Authentication to hos

C#和ASP.Net面试题目集锦

1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.2.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程.请附code3.什么叫应用程序域?什么是受管制的代码?什么是强类型系统?4..Net中读写数据库需要用到哪些类?他们的作用5.ASP.net的身份验证方式有哪些?分别是什么原理?6.解释一下UDDI.WSDL的意义及其作用.7.常用的调用webservice方法有哪些?8.讲一讲你理解的web se

SqlServer教程:经典SQL语句集锦

SQL分类: DDL-数据定义语言(CREATE,ALTER,DROP,DECLARE) DML-数据操纵语言(SELECT,DELETE,UPDATE,INSERT) DCL-数据控制语言(GRANT,REVOKE,COMMIT,ROLLBACK) 首先,简要介绍基础语句: 1.说明:创建数据库CREATE DATABASE database-name 2.说明:删除数据库drop database dbname3.说明:备份sql server --- 创建 备份数据的 deviceUSE

node.js项目开发问题集锦(不定期更新,随时把开发过程中遇到的问题加上)

1.用express开发站点时,怎么定义通用的头部和尾部 方案1:用类似asp时代的include添加,如ejs模板: <% include ../header.ejs %> <h1 class="page-header"> 这里是内容. 注:..表示header.ejs在上一级目录,ejs扩展名可以去掉,直接写:include ../header </h1> <% include ../footer %> 方案2:用类似于MVC的lay

IIS下发布关于Excel导入导出时遇到的问题集锦(转)

问题描述 1.Excel每个工作薄(sheet)生成记录行数 2.asp.net关于导出Excel的一些问题的集锦 3.下载失败,临时文件或其所在磁盘不可写 4.未能加载文件或程序集"Microsoft.Office.Interop.Excel, Version=14.0.0.0,** 5.IIS下发布操作Excel程序时遇到{00024500-00***即80070005错误 6.System.ComponentModel.Win32Exception: 拒绝访问 有关这这几个问题详解. 问题