我已经看到了这个问题的多种变体,但所有的答案似乎都涉及到javascript。
我正在查询数据库,检索项目列表,并使用完全相同的内容填充3个不同的下拉列表。从列表中选择一个项目,然后单击“保存”按钮后,我收到无效的回发错误。
我确定这是因为我在我的DropDownList上使用AutoPostBack来触发更新并禁用其他列表中的新选择。当我将AutoPostBack设置为false时,错误消失。
我已经读过我需要注册我的列表内容以进行事件验证,但我看到的例子,如上所述,是用javascript手动输入或处理的;不是来自数据库查询生成的内容的服务器端。
我现在使用的解决方案是“链接按钮”而不是常规的asp:按钮,因为前者似乎不会导致回发。
我想知道是否有更正式的处理方法。出于安全原因,我不打算禁用事件验证。
<asp:UpdatePanel ID="DropDownListPanel" runat="server"
ChildrenAsTriggers="true" ><ContentTemplate>
<asp:gridview GridLines="Both" runat="server"
ShowHeader="false" ShowFooter="true" HorizontalAlign="Left"
AutoGenerateColumns="false">
<Columns>
<asp:TemplateField ControlStyle-Height="100%" ItemStyle-Width="25%">
<ItemTemplate>
<asp:DropDownList ID="DropDownList1" runat="server"
AppendDataBoundItems="true" Width="100%" AutoPostBack="true"
OnSelectedIndexChanged="CheckItem">
<asp:ListItem Value="-1">Select</asp:ListItem>
</asp:DropDownList>
</ItemTemplate>
</Columns>
</asp:gridview>
</ContentTemplate>
</asp:UpdatePanel>
<asp:Button ID="SaveButton" runat="server" Text="Save"
Enabled="True" OnClick="SaveTable" />