posted @ 2007-05-31 13:36 桂涛 阅读(18) 评论(0) 编辑
偶然发现了一个2.0与1.1的一个不同点,写出来给大家提个醒。
是关于前台页面生成代码的。我们知道,asp.net的服务器控件最终都会解释到前台的javascript脚步和html代码,比如“datagrid”控件会解释成“table”标签,“CheckBox”控件会解释成“<input type='checkbox'……”标签。不论是asp.net2.0还是asp.net1.1都是这样的机制,所以我们时常可以利用这个机制,在前台写一些javascript脚本来操作这些解释以后生成的html标签,以及调用一些事件。不知道大家是不是经常这样用,反正我经常使用这个方法,并且乐此不疲。
一个偶然的事件发现了一个问题,我直接拷贝了一些在1.1下的一些js脚本到2.0下的项目里使用,发现有错误,脚本错误,百思不得其解,然后仔细研究了asp.net2.0生成的前台代码,发现了秘密。在asp.net下,在datagrid模板列里的服务器控件解释后,生成的标签会根据原来服务器控件的id来生成新的id。
比如(asp.net1.1下),DataGrid控件的模板列里使用CheckBox控件:
<asp:datagrid id="myDataGrid" runat="server" AutoGenerateColumns="False" Height="100%" Width="100%"
EnableViewState="false">
<AlternatingItemStyle CssClass="list_bai"></AlternatingItemStyle>
<ItemStyle CssClass="list_lan"></ItemStyle>
<HeaderStyle CssClass="list_1"></HeaderStyle>
<Columns>
<asp:BoundColumn DataField="COLOR_ID" HeaderStyle-CssClass="disTd" ItemStyle-CssClass="disTd"></asp:BoundColumn>
<asp:TemplateColumn HeaderStyle-HorizontalAlign="Center" ItemStyle-HorizontalAlign="Center" HeaderText="选择<input type='checkbox' id='' onclick='doSelectAll();' title='全选'>">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
<ItemTemplate>
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>
</ItemTemplate>
</asp:TemplateColumn>
<asp:HyperLinkColumn DataNavigateUrlField="COLOR_ID" DataNavigateUrlFormatString="InfoCOLOR.aspx?id={0}&flag=0"
DataTextField="COLOR_NAME" HeaderText="颜色名称">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
</asp:HyperLinkColumn>
<asp:BoundColumn DataField="COLOR_CODE" HeaderText="颜色HTML编码">
<HeaderStyle HorizontalAlign="Center" CssClass="list_1"></HeaderStyle>
<ItemStyle HorizontalAlign="Center" CssClass="list_td"></ItemStyle>
</asp:BoundColumn>
</Columns>
</asp:datagrid>
解释到前台的html后成了:
<table cellspacing="0" rules="all" border="1" id="myDataGrid" style="height:100%;width:100%;border-collapse:collapse;">
<tr class="list_1">
<td class="disTd"> </td><td class="list_1" align="Center">选择<input type='checkbox' id='' onclick='doSelectAll();' title='全选'></td>
<td class="list_1" align="Center">颜色名称</td>
<td class="list_1" align="Center">颜色HTML编码</td>
</tr>
<tr class="list_lan">
<td class="disTd">16</td><td class="list_td" align="Center"> <input id="myDataGrid__ctl2_CheckBox1" type="checkbox" name="myDataGrid:_ctl2:CheckBox1" /></td>
<td class="list_td" align="Center"><a href="InfoCOLOR.aspx?id=16&flag=0">213`</a></td>
<td class="list_td" align="Center">123123</td>
</tr>
</table>我们可以看到DataGrid 控件变成了Table标签,id不变,而原来的
<asp:CheckBox id="CheckBox1" runat="server"></asp:CheckBox>变成了
<input id="myDataGrid__ctl2_CheckBox1" type="checkbox" name="myDataGrid:_ctl2:CheckBox1" /> 这里的“myDataGrid__ctl2_CheckBox1”就是asp.net自动添加的,他是结合了他所在的DataGrid的id和自身的id以及绑定数据后所在的行而生成的。
以上的结果是asp.net1.1下生成的,到了2.0生成的id发生了变化,id不是myDataGrid__ctl2_CheckBox1了,而是myDataGrid:_ctl2:CheckBox1,而name属性却不变,可以猜想微软这样的做的目的就是把id跟name一致起来,其实本来就应该这样吗,也许这是dotnet1.1不合理的地方之一吧。
小小的发现,希望对大家有所帮助。
posted @ 2007-01-14 12:03 桂涛 阅读(4278) 评论(10) 编辑
项目中要实现导出Excel的功能,于是借助模式窗口来显示条件选择界面,通过按钮的单击事件来执行导出功能,并直接下载文件。代码录入完毕,编译顺利通过,然后打开页面测试,怪事来了,死活不行,仔细查看了代码,奇怪,没有问题啊。这时我就想是不是模式窗口的原因啊,于是在打开模式窗口的父页面随意添加了个按钮测试一下,程序正常,可以下载文件。看来还真是模式窗口的原因,那这是为什么呢,是不是有办法可以避免呢?于是带着这个问题,到百度搜索,看来遇到这个问题的人还真是不多,费了九牛二虎之力才查到一个帖子,说的很简单,只是说模式窗口不能实现打印、文件下载功能,解决的办法是使用iframe或用window.open来打开窗口。先不追究为什么了,试一下再说。果然,iframe可行。
posted @ 2007-01-11 12:37 桂涛 阅读(723) 评论(3) 编辑
就在今天早上,正在网上搜索资料,突然看到有什么忽闪了几下,然后没了动静,我马上意识到又中毒了,这种病毒在公司遇到过,厉害啊,首先干掉诺顿,并且连“任务管理器”也不让你使用了,我把鼠标移到系统栏的诺顿的图标上,果然,图标马上消失了,tnnd果然中了那可恶的病毒。于是断开网络、关闭所有程序,运行“落雪专杀工具”和“威金专杀工具”,呵呵,幸亏动作快,这两个专杀工具马上抓住了可疑份子,杀掉了,然后重复查杀数次,确定没有了,然后再重启系统,启动后再次查杀,终于,病毒被干掉。这是无数次对抗中的一次小小的胜利,哈哈,小样,别惹我!
事后分析,应该是打开了某个带有病毒的网页造成的,以后要小心啊,不熟悉的网站不能随随便便上了。
强烈推荐去江民下载最新的“落雪专杀”和“威金专杀”工具,那是相当好用啊。
posted @ 2007-01-11 12:23 桂涛 阅读(208) 评论(0) 编辑
