我对此感到非常难过,非常感谢任何帮助。
我正在处理位于更新面板内的用户控件。表单上有一个按钮,可以加载一些数据。这工作正常。
还有一个用于过滤数据的下拉框。更改此功能确实会启动回发,但没有任何反应。下拉框返回默认值,永远不会调用OnSelectedIndexChanged函数。
我在page_prerender和page_preload中放置了断点,并且两者都被击中了帖子肯定会发生。带有dropdownGroup_changed函数的断点永远不会被命中。
删除更新面板可以解决问题,但是它会破坏页面的其余部分,因此我不能将其用于除测试之外的任何其他内容。
我还验证了我的预渲染/页面加载中没有任何内容正在重置页面的状态。
以下是更新面板代码:
<asp:UpdatePanel ID="UpdatePanel6" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >
<ContentTemplate>
<ucControlName:ControlName ID="ControlName1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
以下是问题的下拉列表 - 它位于用户控件
内<asp:DropDownList ID="dropdownGroup" runat="server" Visible="false" AutoPostBack="true" OnSelectedIndexChanged="dropdownGroup_changed"></asp:DropDownList>
当然可以通过代码中出现问题的点来查看和数据绑定
更多信息 - 添加了硬编码下拉列表(以排除愚蠢的数据绑定问题)和文本框到同一控件。我有同样的问题。
事件似乎没有触发,因为就.net而言,值永远不会改变。我在page_init和page_load期间检查了控件 - 值总是一样的。
按钮工作但其他控件不会让我认为某处存在视图状态问题,但我无法理解导致它的原因。为页面和面板启用了Viewstate-不知道是否还有其他任何内容可能覆盖/损坏它。
我是否提到我讨厌激情更新面板?因为我讨厌激情更新面板。
答案 0 :(得分:1)
一个价格的两个答案:
您是否在DataBind()
中致电Page_Load
了?如果您在PostBack
上执行此操作,则会丢失事件。用以下内容替换呼叫:
if (!IsPostBack) {
DataBind();
}
如果您的DropDownList
位于UpdatePanel
之外,则需要添加Trigger
,如下所示:
<asp:UpdatePanel ID="UpdatePanel6" runat="server" ChildrenAsTriggers="true" UpdateMode="Conditional" >
<Triggers>
<asp:AsyncPostBackTrigger ControlID="dropdownGroup" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<ucControlName:ControlName ID="ControlName1" runat="server" />
</ContentTemplate>
</asp:UpdatePanel>
答案 1 :(得分:1)
我建议检查'DropDownList'控件中每个'ListItem'的'Value'属性。如果它们都是相同的,即使'Text'属性不同,那么'OnSelectedIndexChanged'根本不会触发,因为ASP.NET无法判断是否有任何更改(参见this related question了解更多信息。)
这是我问题的真正原因,尽管我也有'UserPatrol'在'UpdatePanel'中有'DropDownList'并且'AutoPostBack'按预期触发。我认为UpdatePanel是罪魁祸首,但事实并非如此。我的DropDownList中的每个项目都具有相同的基础值“10”,即使它们具有不同的“文本”值。我将它们更改为每个都有一个唯一值,然后允许OnSelectedIndexChanged事件触发,从而修复问题。
答案 2 :(得分:0)
您是否尝试过UpdatePanel.Update();在您的数据绑定之后。