使用 ICallbackEventHandler aspx页面中的DropDownList 的 SelectValue 出现中文导致不回调方法的问题
2007-01-27 20:49
555 查看
在一次开发过程中,我在页面中使用 ICallbackEventHandler 来做回调方法来显示下拉框省份和城市,刚开始页面就只有这点东西,也没有一点问题,做好之后丢给自己的同事做剩下的页面工作,在这个页面做完之后郁闷的事情发生了,刚开始我写的 ICallbackEventHandler 的方法不回调了,我开始检查是否方法错了,开始做断点。。。一一排除```可是发现写的 ICallbackEventHandler 如果提出来单独运行没有一点问题,可是和页面里面其他代码一起运行的时候就出问题了,很奇怪?难道代码冲突?```貌似没有听说过这样的冲突,只有逻辑出现冲突的```(复杂的错误排查中。。。)
后来问题停留在这段代码上面了:
<asp:DropDownList ID="drpAuditState" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drpAuditState_SelectedIndexChanged">
<asp:ListItem Value="全部" Text="全部"></asp:ListItem>
<asp:ListItem Value="待审核" Text="待审核"></asp:ListItem>
<asp:ListItem Value="未通过审核" Text="未通过审核"></asp:ListItem>
<asp:ListItem Value="通过审核" Text="通过审核"></asp:ListItem>
</asp:DropDownList> 把上面这段代码注释的话就没有问题了,但是一加上这段代码就使 ICallbackEventHandler 不能回调服务器端的代码了。。。 后来换成了这样: <asp:DropDownList ID="drpAuditState" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drpAuditState_SelectedIndexChanged">
<asp:ListItem Value="1" Text="全部"></asp:ListItem>
<asp:ListItem Value="2" Text="待审核"></asp:ListItem>
<asp:ListItem Value="3" Text="未通过审核"></asp:ListItem>
<asp:ListItem Value="4" Text="通过审核"></asp:ListItem>
</asp:DropDownList>
这样子就可以正常运行了。
原因找到了,现在粗略的分析一下:
第一:如果在 DropDownList 里面的Value使用中文的话,需要在 Web.Config 里面设置默认的字符编码是
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/> 这不写也是默认的
第二:如果已经在Web.Config里面使用了 <globalization requestEncoding="gb2312" responseEncoding="gb2312"/> 这样出现了上面的情况就会导致 ICallbackEventHandler 不能正常的运行了,不过这个问题可以解决在后台手动添加 DropDownList 里面的值:
drpAuditState.Items.Add(new ListItem("全部",Server.UrlEncode("全部")));
...
...
这里需要使用到 Server.UrlEncode 方法把字符串做一个 Url 编码让它可以被浏览器进行传值的时候认的到。然后取值的时候再做一道解码的工作就可以了,Server. UrlDecode 这样也可以解决问题。
小结:其实大多数的开发过程中不会遇见此问题,只有在控制了网站的字符集为 gb2312 然后使用 DropDownList 的时候又使用到了中文的值才会有这样的问题发生。不过遇到的时候确实还是汗了一下。。。留一个心得在此以后做一个参考。。。
后来问题停留在这段代码上面了:
<asp:DropDownList ID="drpAuditState" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drpAuditState_SelectedIndexChanged">
<asp:ListItem Value="全部" Text="全部"></asp:ListItem>
<asp:ListItem Value="待审核" Text="待审核"></asp:ListItem>
<asp:ListItem Value="未通过审核" Text="未通过审核"></asp:ListItem>
<asp:ListItem Value="通过审核" Text="通过审核"></asp:ListItem>
</asp:DropDownList> 把上面这段代码注释的话就没有问题了,但是一加上这段代码就使 ICallbackEventHandler 不能回调服务器端的代码了。。。 后来换成了这样: <asp:DropDownList ID="drpAuditState" runat="server" AutoPostBack="True" OnSelectedIndexChanged="drpAuditState_SelectedIndexChanged">
<asp:ListItem Value="1" Text="全部"></asp:ListItem>
<asp:ListItem Value="2" Text="待审核"></asp:ListItem>
<asp:ListItem Value="3" Text="未通过审核"></asp:ListItem>
<asp:ListItem Value="4" Text="通过审核"></asp:ListItem>
</asp:DropDownList>
这样子就可以正常运行了。
原因找到了,现在粗略的分析一下:
第一:如果在 DropDownList 里面的Value使用中文的话,需要在 Web.Config 里面设置默认的字符编码是
<globalization requestEncoding="utf-8" responseEncoding="utf-8"/> 这不写也是默认的
第二:如果已经在Web.Config里面使用了 <globalization requestEncoding="gb2312" responseEncoding="gb2312"/> 这样出现了上面的情况就会导致 ICallbackEventHandler 不能正常的运行了,不过这个问题可以解决在后台手动添加 DropDownList 里面的值:
drpAuditState.Items.Add(new ListItem("全部",Server.UrlEncode("全部")));
...
...
这里需要使用到 Server.UrlEncode 方法把字符串做一个 Url 编码让它可以被浏览器进行传值的时候认的到。然后取值的时候再做一道解码的工作就可以了,Server. UrlDecode 这样也可以解决问题。
小结:其实大多数的开发过程中不会遇见此问题,只有在控制了网站的字符集为 gb2312 然后使用 DropDownList 的时候又使用到了中文的值才会有这样的问题发生。不过遇到的时候确实还是汗了一下。。。留一个心得在此以后做一个参考。。。
相关文章推荐
- JavaScript回调方法中使用外部变量出现的问题
- 升级tomcat后出现的页面录入框中文乱码问题解决方法
- JSP页面中超链接传递中文参数出现乱码问题解决方法
- JSP页面中超链接传递中文参数出现乱码问题解决方法
- php使用GD图像库绘制输出图像出现乱码问题和图片上输出中文出现乱码问题解决方法。
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- 升级tomcat后出现的页面录入框中文乱码问题解决方法
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- VC轻松解析XML文件--CMarkup使用方法(解决解析中文字符出现乱码问题)
- win7 64位系统使用VS2010生成时出现中文目录乱码问题的解决方法
- jquery使用append方法添加子元素导致页面刷新的问题
- PHP使用ob_start+callback回调的时候路径设置不当出现的问题
- php读取csv文件后,uft8 bom导致在页面上显示出现问题的解决方法
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- html5新特性:利用history的pushState等方法来解决使用ajax导致页面后退和前进的问题
- vs2008与IIS 7.0使用在vista上时出现的问题及解决方法(Internet Explorer 无法显示该页面)(VS2008: IE Cannot Display Web Page)