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代码。
至此,真的可以告一段落了。大家也可以把它做成用户控件,方便以后重用。有不合理的地方,欢迎 大家和我交流!

2.引用的类库使用log4net日志插件写日志:

首先在项目的web.config文件配置log4net的信息,在“configSections”节点下添加子节点:<section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" />

然后在ConfigSections节点同级下面添加节点:

<log4net>
<root>
<level value="ALL" />
<appender-ref ref="SysAppender" />
</root>
<logger name="Logger">
<level value="DEBUG" />
</logger>
<appender name="SysAppender" type="log4net.Appender.RollingFileAppender,log4net">
<param name="File" value="Log/" />
<param name="AppendToFile" value="true" />
<param name="RollingStyle" value="Date" />
<param name="DatePattern" value="yyyy-MM-dd&quot;.log&quot;" />
<param name="StaticLogFileName" value="false" />
<layout type="log4net.Layout.PatternLayout,log4net">
<param name="ConversionPattern" value="%nException Time:%d [%t] Exception Level:%-5p %nException position:[%thread] %file %method %line %nException Description:%message%nStack Trace :%exception%n" />
</layout>
</appender>
</log4net>

最后在引用的类库的Assemblyinfo文件里添加一行代码:[assembly: log4net.Config.XmlConfigurator()],日志路径权限添加everyone权限(读写权限)

3.Remote Debugger 远程调试:

在自己电脑上找到VS安装目录(C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\Common7\IDE\Remote Debugger),目录下面会有3个版本“Appx”、“x64”、“x86”,根据服务器操作系统版本选择相应的版本,服务器是x64位版本的,那么把x64文件夹复制到服务器的非系统盘的一个目录下,在x64文件夹里找到"msvsmon.exe"文件,右击使用管理员身份运行,如下图,在打开的窗口中 “工具”=》“选项”("Tools"=>"Options"),(无身份验证,允许任何人用户进行调试,端口可以随意自己设置或则保持默认)

然后服务器上的部署包必须是Debugger版本的,

正常打开一个页面。

开始远程调试:

在vs中,选择调试-附加到进程,连接类型选择“远程(无身份验证)”,连接和目标输入ip:port(或者机器名:端口号),回车即可!如下图

选择下面需要调试的进程,名称为“w3wp.exe”的进程,附加即可!重新请求网址,我们可以发现成功进入设置的断电

4.运行c#程序,报错,内容为:“Input string was not in a correct format”,我遇到过的情况有反序列化时报错,或使用String.Formate(参数1,参数2),参数1中形参例如 Hello {0}  ,其中{0}类似这种参数有多余的大括号,for example:{0}}

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

  1. ASP.NET 问题集锦

    [1]解决错误:从客户端(Content="<p>测试</p>")中检测到有潜在危险的 Request.Form 值      .NetFrameWork ...

  2. ASP.NET MVC HtmlHelper用法集锦

    ASP.NET MVC HtmlHelper用法集锦 在写一个编辑数据的页面时,我们通常会写如下代码 1:<inputtype="text"value='<%=View ...

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

    1.有哪几种方法可以实现一个类存取另外一个类的成员函数及属性,并请举列来加以说明和分析.2.A类是B类的基类,并且都有自己的构造,析构函数,请举例证明B类从实例化到消亡过程中构造,析构函数的执行过程. ...

  4. ASP.NET 状态服务 及 session丢失问题解决方案总结

    ASP.NET2.0系统时,在程序中做删除或创建文件操作时,出现session丢失问题.采用了如下方法:1.asp.net Session的实现:asp.net的Session是基于HttpModul ...

  5. [转]ASP.NET 状态服务 及 session丢失问题解决方案总结

    转自[http://blog.csdn.net/high_mount/archive/2007/05/09/1601854.aspx] 最近在开发一ASP.NET2.0系统时,在程序中做删除或创建文件 ...

  6. asp.net资料! (.NET) (ASP.NET)

    使用SqlBulkCopy类加载其他源数据到SQL表 在数据回发时,维护ASP.NET Tree控件的位置 vagerent的vs2005网站开发技巧 ASP.NET2.0小技巧--内部控件权限的实现 ...

  7. 2016最新Java笔试题集锦

    更新时间:2015-08-13         来源:网络         投诉删除 [看准网(Kanzhun.com)]笔试题目频道小编搜集的范文“2016最新Java笔试题集锦”,供大家阅读参考, ...

  8. delphi关于文件操作集锦

        关于文件操作集锦 取得该快捷方式的指向EXE关键词:快捷方式 LNK unit Unit1; interface usesWindows, Messages, SysUtils, Varian ...

  9. Java笔试题集锦

    Java笔试题集锦 1.MVC的各个部分都有那些技术来实现?怎样实现? 答:MVC是Model-View-Controller的简写."Model" 代表的是应用的业务逻辑(通过J ...

随机推荐

  1. 国旗计划(flag)

    国旗计划(flag) 题目描述 A国正在开展一项伟大的计划--国旗计划.这项计划的内容是边防战士手举国旗环绕边境线奔袭一圈.这项计划需要多名边防战士以接力的形式共同完成,为此,国土安全局已经挑选了n名 ...

  2. 如何用js让表格的行也能拖动

    行拖动的实现思路非常简单,选中一行,往上拖就与上面的行交换位置,往下拖就与下面的行交换位置.问题是如何得到交换行.我见过一个非常详细的教程,它会把表格里的每一行的高度与Y坐标计算出来,换言之,都时是比 ...

  3. Yii2.0 使用createcommand从数据库查询出来的int类型变成了string型

    在给客户端写接口文档时,会给每个返回的字段标上数据类型,客户端会根据标注的类型来解析数据,如果标注的类型错误,会导致客户端解析出错,造成崩溃. 一直以来我都是用的Yii进行项目的开发,之前使用Yii1 ...

  4. 微信2种access_token对比

    1.需求 了解网页accesstoken和基础accesstoken的不同 参考资料:http://www.cnblogs.com/wellsoho/p/5089409.html

  5. 新blog开张!

    以后不出意外就只在新的blog更新了! hexo搭建的新blog 然后的然后是继续奋斗!

  6. Linux Ubuntu mysql 乱码

    进入mysql后,敲入命令status,就可以看到mysql的字符编码问题. 默认如下: Server characterset:    latin1 Db  characterset:    lat ...

  7. InnoDB的多版本并发控制(MMVC)

    InnoDB的MVCC之(乐观锁),是通过在每行记录保存两个隐藏列来实现的.这两个列,一个是存创建时间,一个是删除时间,这里的时间指的是,系统版本号,并不是真正的时间值. 每开始一个新的事务,系统版本 ...

  8. Ubuntu系统用户与用户组

    1.查看用户组 vi /etc/group 结果说明: 组名: 组名是用户组的名称,由字母或数字构成.与/etc/passwd中的登录名一样,组名不应重复.   口令: 口令字段存放的是用户组加密后的 ...

  9. 设置小于12px的字体

    .small-font{   font-size:12px;             -webkit-transform-origin-x: 0;            -webkit-transfo ...

  10. 在Framework2.0环境下运行3.5的代码

    因为许多的服务器特别是廉价的服务器上使用的是Framework的v2.0.50727.再加上自己开发的算是产品,所以就需要降低一些客户的前期成本,而自己同时也喜欢简单的代码.后来查了下,得知其实Fra ...