<span style="font-family: Arial, Helvetica, sans-serif; background-color: rgb(255, 255, 255);">1、在ASP.NET中,使用全局变量,并在Page_Load()方法中赋值后,在其他方法中调用会发现原先赋值无效了</span>
原因:全局变量被释放掉了,每次执行方法后都会被释放,于是在调用的时候变成了null
方案:如果是一次赋值之后都只调用,则设置静态变量即可,否则只能每次重新赋值
2、使GridView能够获取隐藏列的值
不能获取的原因:visible=false的时候系统会默认的不绑定该字段,所以为空,获取不到
使用中的方案:更换隐藏顺序,在绑定数据后,设置该列visible=false,这样绑定了数据,同时隐藏了列
3、使用一般处理程序处理同一页面上传的多个不同文件时出现重复上传同一文件
原因:一般处理程序中的HttpFileCollection获取的是文件列表,同一页面上的文件上传请求都在这个列表中
解决方案:增加索引号进行取值
获取上传的文件列表:
HttpFileCollection files = context.Request.Files;
int counter = files.Count;
获取文件:
HttpPostedFile file = files[counter-1];
最新上传的文件始终为索引最大,所以用这种计数的方式即可解决问题
问题:上传同一文件或者重新上传其他文件的时候也会进入文件列表,并且索引加+1,貌似这种上传会影响网络状态,但是根据测试情况来看他似乎是相同文件不再重新上传,具体还需要进一步测试,测试之后更新该条目准确信息
4、关于js的位置
有时候放在顶部,有时候放在尾部,但是经常出现放在顶部不能实现功能,但是放在底部就行,终于知道原因了,如果是直接调用控件不是控件调用js的那种,都是需要放在尾部,js在头部会优先加载js此时控件未能加载,所以会失效
5、出现了asp:button的onClick事件无法触发的问题
问题:添加了onclientclick并且返回true的时候可以触发onclick,但是不添加就不行
解决方案:该按钮的CausesValidation为true,改为false就可以了,正常触发
6、发现使用一般处理程序进行文件上传处理有顺序问题
问题:在一个页面写两个分别控制文件上传和图片上传的一般处理程序,当处理程序获取文件的时候,他会按照控件在前台页面加载的顺序排列文件顺序,比方说使用上传控件fu_Pic和fu_File,fu_Pic在前,那么当两个都上传过文件时候一般处理程序里接收到的参数顺序是fu_Pic fu_File而不会是fu_File fu_Pic,当只有一个控件生效时候参数列表只有那一个控件,而不会出现两个,但是如果两个都触发过一次,那么始终参数列表就会有两个,而且是前后顺序一定
7、连接数据库的时候,如果数据库为bit这种真假值,写的时候要写0和1,不识别true和false
8、C#做wiform程序的时候,如果用到多线程,并且子线程需要访问主线程控件的时候,需要在访问控件的方法加上线程的判断,将方法执行交给主线程,否则子线程去访问在主线程上的控件就容易出错
private delegate void DoRefreshJob(List<Citys> newData, int i);
private void RefreshView(List<Citys> newData, int i)
{
if (GridList[i].InvokeRequired == false)
{
// 在同一个线程上,直接更改数据
GridList[i].DataSource = newData;
GridList[i].Show();
}
else
{
// 不在同一个线程上
// 需要挂代理
DoRefreshJob DRJ = new DoRefreshJob(RefreshView);
GridList[i].Invoke(DRJ, newData, i);
}
}
如上例子,子线程处理完数据需要刷新主线程上的gridview,则可以通过delegate将方法和参数交给主线程去执行,这样就能顺利执行不会报错,否则强行启用多线程访问则该方法会导致为空异常
9、在updatepanel中的按钮如何触发onclientclick的confirm方法
如果直接用return confirm()的话会无法弹窗,如果后台使用scriptmanager会导致无法获取用户的选择,然后无意发现js写在updatepanel中是不受刷新影响的,所以在updatepanel中写一个方法,返回confirm就行了,参考
OnClientClick="return DeleteConfirm()"
在updatepanel中写js
<script type="text/javascript">
function DeleteConfirm() {
return confirm("确认删除?");
}
</script>
于是可以成功解决
10、对于IIS的默认文档,默认页面尽量放在根目录,这样就不会出现页面跳转路径不对的问题了,页面跳转是根据地址栏的内容拼接目录进行跳转的,所以192.168.1.1的默认文档是/Web/Index.aspx,然后/Web/Index.aspx下同级的/Web/Info.aspx在index页面里用Info.aspx是会404的,所以默认文档放到根目录能一定程度上防止跳转404的问题