写代码时出现一个很常见的问题,回发或回调参数无效.
前台代码如下
<form id="form1" runat="server">
<div><asp:Label ID="Label1" runat="server" Text="Label">学号请输入1或2;姓名请输入小红或小蓝</asp:Label> </div>
<asp:RadioButton ID="rbnStuNo" runat="server" GroupName="tbTest" Text="学号" />
<asp:RadioButton ID="rbnStuName" runat="server" GroupName="tbTest" Text="姓名" />
<asp:TextBox ID="txtQuery" runat="server"></asp:TextBox>
<asp:LinkButton ID="lbtQuery" runat="server" OnClick="lbtQuery_Click1">查询</asp:LinkButton>
<asp:Table ID="tbTest" runat="server">
</asp:Table>
</form>
前台界面如下:
代码很简单,不复杂,但是就是不停的报错.如果把EnableEventValidation设置为"false",不报错,但是linkbutton不管用了.后来发现查询还是管用的,前提是没有点击单选框,直接输入文本,点击查询是可以查询出数据的.但是如果学号,姓名单选框,点击任意一个之后,查询就不管用了.
网上说出现这个问题,无非是这几个方面.
一 是 Form嵌套,一个页面只能有一个Form,仔细检查代码就可以解决。
二 是 在下拉菜单中使用ajax,常见于省市联动菜单,可能是由于在aspx页面赋给了下拉菜单初始Item值,在事件回发时提示该错误,将下拉菜单初始Item值删除,在绑定事件中添加Item项。
三 是 if (!Page.IsPostBack)
四 是 DropDownList 控件的ListItem 的Value 属性包含汉字.只要将Value 改为英文或数字的就行了。
但是以上这几个要么我不符合,要么改了也没效果.而且使用了ClientScriptManager.RegisterForEventValidation 方法来注册回发或回调数据以进行验证还是没用.
最后把代码在新建的一个页面中发现能够执行,前台是重新拖控件整的,后台基本完全复制粘贴过去的.所以问题出现在前台.最后发现
<asp:RadioButton ID="rbnStuNo" runat="server" GroupName="tbTest" Text="学号" />
<asp:RadioButton ID="rbnStuName" runat="server" GroupName="tbTest" Text="姓名" />
<asp:Table ID="tbTest" runat="server">
单选框的GroupName和Table的ID是同样的,都是tbTest,修改源代码中的GroupName为tbTest1,代码正确执行.而且EnableEventValidation也不用设置为false就可以正常执行.
解决完问题,发现问题非常非常简单,但是它却花费了我N久N久的时间.我想我以后再也不会给GroupName起名起的和ID重复的,纯粹是我太懒了,起个名懒得想.而且我的窗体名和解决方案是一样的,这个尽管没有什么影响,但是以后还是注意点吧.