【问题标题】:updatepanel asynpostbacktrigger does not throw defined event?updatepanel asynpostbacktrigger 不抛出定义的事件?
【发布时间】:2013-09-04 16:57:29
【问题描述】:

我有以下代码。

我想要的是当 ddlProvince 下拉列表发生更改时,抛出 SelectedIndexChanged 事件,但是该方法永远不会被访问。

<asp:UpdatePanel ID="pnlCountries" runat="server">
<Triggers>
    <asp:AsyncPostBackTrigger ControlID="ddlProvince" EventName="SelectedIndexChanged" />
</Triggers>
<ContentTemplate>
<tr>
    <td><asp:Literal ID="Literal37" Text="<%$Resources:glossary,country %>" runat="server"/></td>
    <td>

<asp:DropDownList ID="ddlCountries" CssClass="textbox" runat="server">
</asp:DropDownList>
<br />
<cc1:cascadingdropdown ID="cddCountries" runat="server" Category="Country" Enabled="True" LoadingText="<%$Resources:Glossary,loading %>" PromptText="<%$Resources:Glossary,country_choose %>" 
ServiceMethod="GetCountries" TargetControlID="ddlCountries">
</cc1:cascadingdropdown>
<asp:RequiredFieldValidator CssClass="errortext" Text="<%$Resources:Glossary,required %>" SetFocusOnError="true" ID="rfvcboScenario" runat="server" InitialValue="" ControlToValidate="ddlCountries" Display="Dynamic" />


    </td>
</tr>
<tr>
    <td><strong><asp:Literal ID="Literal9" Text="<%$Resources:Glossary,province %>" runat="server" /> *</strong></td>
    <td>
        <asp:DropDownList ID="ddlProvince" CssClass="textbox" runat="server">
        </asp:DropDownList>       
        <asp:RequiredFieldValidator CssClass="errortext" Text="<%$Resources:Glossary,required %>" SetFocusOnError="true" ID="RequiredFieldValidator1" runat="server" InitialValue="" ControlToValidate="ddlProvince" Display="Dynamic" />
    <cc1:CascadingDropDown ID="cddProvince" runat="server" TargetControlID="ddlProvince" ParentControlID="ddlCountries"   
        Category="Province" LoadingText="<%$Resources:Glossary,loading %>" prompttext="<%$Resources:Glossary,province_select %>" ServiceMethod="GetProvincesForCountry" >
    </cc1:CascadingDropDown>


</td>
</tr>
</ContentTemplate>
</asp:UpdatePanel>

目前此代码行从未被命中:

Protected Sub ddlProvince_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlProvince.SelectedIndexChanged
    ReportError("ddlProvince_SelectedIndexChanged", "")
End Sub

更新: 以前我在 ddlProvince 控件上有 Autopostback="true" 属性,但是,这导致了完整的回发(这里也描述了问题:Drop Down List (in Update Panel) causing FULL PostBack!)

我错过了什么?

【问题讨论】:

  • 可能你已经找到了——你需要设置 ddlProvince 的 AutoPostback="true",然后 AsyncPostBack 工作正常。您还需要保留 AsyncPostBackTrigger。
  • 这应该是你的答案:)

标签: asp.net asynchronous triggers updatepanel postback


【解决方案1】:

编辑: 您需要为下拉列表设置AutoPostBack="true"。改变这个:

<asp:DropDownList ID="ddlProvince" CssClass="textbox" runat="server">
        </asp:DropDownList>

到这里:

<asp:DropDownList ID="ddlProvince" CssClass="textbox" runat="server" AutoPostBack="true" >
        </asp:DropDownList>  

【讨论】:

  • 我也是这么想的,但是后来我遇到了这个问题:stackoverflow.com/questions/2138565/…
  • 事件不是已经通过这一行附加了:Protected Sub ddlProvince_SelectedIndexChanged(sender As Object, e As EventArgs) Handles ddlProvince.SelectedIndexChanged 我也试过按照你的方式做,并删除了“Handles”部分,但是仍然没有运气......
  • 谢谢你uuuuuu 我已经开始使用自动回帖,但它的行为是有线的,但你的帖子再次尝试,我明白我做错了什么。
【解决方案2】:

您可能没有在标记中设置OnSelectedIndexChanged 事件,如上所示。

您应该设置三个属性:OnSelectedIndexChanged、AutoPostback & EnableViewState

<asp:DropDownList ID="ddlProvince" runat="server" 
     AutoPostBack="true" EnableViewState="true"
     OnSelectedIndexChanged="ddlProvince_SelectedIndexChanged">                
</asp:DropDownList>

如果您将下拉列表绑定到 page_Load 事件中,请将其放在 !IsPostback 条件检查中:

protected void page_Load ( object sender, EventArgs e )
{
     if(!IsPostBack)
     {
            //DropDownList data bind and all...
      }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多