花了4个小时终于解决了。
1.把<asp:DropDownList />这种服务器控件,改为:<select id="xxx" runat="server"></select>这种html的服务器
2.由于加了runat=server所以操作上和一般的DropDownList一样,也可以进行bind
3.在提交后取值的时候,这么写:
ClassID = Request[xxx.UniqueID];
4.如果是在用户控件中,则这么写:
htmlDown = (System.Web.UI.HtmlControls.HtmlSelect)this.UserControlBlogClass1.FindControl("xxx");
ClassID = Request[htmlDown.UniqueID];
ClassID = Request[htmlDown.UniqueID];
原因分析:
由于动态往DropDownList中添加了新项,导致DropDownList中的项目与隐藏域中记录的项目不符,所以就出现了“回发或回调参数无效”问题。
网上也有说通过 protected override void Render(System.Web.UI.HtmlTextWriter writer)事件,ClientScript.RegisterForEventValidation方法向隐藏域中注册项。我试了好多次,也没有成功。