回发或回调参数无效 “HtmlSelect”不能有类型为“LiteralControl”的子级

原文发布时间为:2009-11-14 —— 来源于本人的百度文章 [由搬家工具导入]

回发或回调参数无效 “HtmlSelect”不能有类型为“LiteralControl”的子级 出现这两个错误,一般是.NET2.0中遇见的错误,解决:

回发或回调参数无效。在配置中使用 <pages enableEventValidation= "true "/> 或在页面中使用 <%@ Page EnableEventValidation= "true " %> 启用了事件验证。出于安全目的,此功能验证回发或回调事件的参数是否来源于最初呈现这些事件的服务器控件。
目前为止遇到的出现情况有两种:
一是Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。
二是在下拉菜单中使用javascript 来更改内容(如AJAX),常见于省 市 联动菜单,在事件回发时提示该错误。

该错误只有在 vs 2.0 上才会出现,如果把 enableEventValidation= "true " 改成 enableEventValidation= "false " 错误是不会出事了但是在代码中确读不到此项的值。

第一种情况的话不能在form 里嵌form
第二种情况的解决办法 就是把 控制改成 Html 的控制,控件带上 runat= "server "

如:下面是我的一个解决办法

一个省份和城市的链动效果

<asp:DropDownList ID= "DropDownList3 " runat= "server " >
</asp:DropDownList>


<select name= "DDLcity " id= "DDLcity " runat= "server ">
<option value= "0 "> =请选择= </option>
</select>

然后在 后台 cs代码里用 Request.Form[ "DDLcity "]; 来接收城市的值。

====================

如果按照上面方法后,出现 “HtmlSelect”不能有类型为“LiteralControl”的子级 这个错误,则一般是以下两种原因:

1、出错原因:

<select>标签内,Id,以及<option>里的value值没有加引号.

处理结果:

把所有id,value加上双引号后,bug消失.

2、在<select >这一行后面加了注释<!--   -->
处理结果: 把注释去掉,或者注释不要写在select标记里面就不报错了。