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. 快速了解Android重要机制

    转自 http://www.jianshu.com/p/5f6d79323923 一.Android系统底层研究 关于底层的知识点不是在一篇文章中能讲解清楚,参见本人的Android底层研究系列,不断 ...

  2. C语言fopen函数了解

    fopen()函数功能:open a file. 原型:FILE * fopen(const char * path,const char * mode); 需要#include<stdio.h ...

  3. vs 2013 update2无法打开 edmx文件

    解决方案:在edmx文件上右键,选择ado.net entity data model designer,即可正常打开!

  4. javascript jquery document.ready window.onload

    网易 博客 下载LOFTER客户端 注册登录  加关注 凡图的编程之路 2012年7月从一个编程新手的点点滴滴 首页 日志 LOFTER 相册 博友 关于我     日志       关于我 Holy ...

  5. Mybatis注解的使用

    一.mybatis 简单注解 关键注解词 : @Insert : 插入sql , 和xml insert sql语法完全一样 @Select : 查询sql, 和xml select sql语法完全一 ...

  6. greasemonkey

    Greasemonkey Hacks/Getting Started < Greasemonkey Hacks Greasemonkey Hacks Foreword Credits Prefa ...

  7. Android BroadcastReceiver使用

    1. 介绍 BroadcastReceiver用于接收广播事件(Intent), 是Android四大组件之一 2. 使用 2.1  实现广播接收类 实现一个广播收类继承BroadcastReceiv ...

  8. UVA 10801 Lift Hopping 最短路

    2种方式直接代码就可以了.注意首次不需要60S的转换 #include <map> #include <set> #include <list> #include ...

  9. kvm虚拟机最佳实践系列3-kvm克隆和静态迁移

    KVM克隆和KVM静态迁移 KVM克隆 上一章我们已经有了一个合用的虚拟机镜像,现在我们需要用这个KVM镜像大量的创建和部署 virt-clone就是做这个用的.它简化了我们克隆KVM的步骤. 首先停 ...

  10. itoa()函数和sprintf()函数

    itoa()函数 itoa 为c语言的一个函数.itoa 函数是一个广泛应用的,从非标准扩展到标准的C语言.它不能被移植,因为它不是标准定义下的C语言,但是,编译器通常在一个不遵循程式标准的模式下允许 ...