ASP.NET:使用jQuery手动更新UpdatePanel

Nie*_*sma 0 c# asp.net jquery

我在使用javascript(jQuery)更新ASP:UpdatePanel时遇到问题.这就是我的意思.

我正在使用隐藏的按钮技巧,因为我似乎无法获得__doPostBack技巧的更新面板的ClientID.

<asp:UpdatePanel runat="server" ID="pnlUpdate">

<Triggers>
<asp:AsyncPostBackTrigger ControlID="btnUpdate" />
</Triggers>

<ContentTemplate>

<asp:UpdateProgress runat="server" AssociatedUpdatePanelID="pnlUpdate" DynamicLayout="false" DisplayAfter="100">
<ProgressTemplate>
<img alt="Laddar..." src="img/loader.gif" width="16" height="11"/>  
</ProgressTemplate>
</asp:UpdateProgress>

<div style="display:none;">  
<asp:Button runat="server" ID="btnUpdate" CommandName="Refresh" CommandArgument='<%# Eval("Id") %>'/>
</div>

<asp:Repeater runat="server" Id="rptrEnquiry">
...
</asp:Repeater>


<%= DateTime.Now.ToString() %>

<a href="javascript:jQuery('#<%= btnUpdate.ClientID %>').trigger('click')&&undefined;">Fire!</a>

</ContentTemplate>

</asp:UpdatePanel>
Run Code Online (Sandbox Code Playgroud)

在处理btnUpdate的代码隐藏中(在GridView RowCommand中),当按下btnUpdate时,rptrEnquiry会反弹.

如果我直接按下按钮(虽然没有隐藏)一切都很完美(显示更新程序并更新日期并更新转发器.

但是,如果我单击fire link并通过javascript触发按钮,则只更新日期,但不显示updateprogress,并且转发器不会反弹.在调试时我可以看到反弹代码已经执行,但它的效果不在更新中.

Nie*_*sma 6

好的,所以我通过完全重建整个事情来解决我的问题.可以帮助其他人的一些经验教训:

我在gridview中有更新面板,当我将updatepanel部分分成一个控件时,我自己的大多数问题都解决了,例如无法引用pnlUpdate.

http://encosia.com/2007/10/24/are-you-making-these-3-common-aspnet-ajax-mistakes/非常有帮助.

更新面板中的更新由其PreRender控制.通过使用__EVENTTARGET,我们感兴趣的面板就会更新.

protected void pnlUpdate_PreRender(object sender, EventArgs args)
{
    if (Request["__EVENTTARGET"] == pnlUpdate.ClientID)
    {
        PreBind();

        switch(Request["__EVENTARGUMENT"])
        {
            case "toggle":
                Toggle();
                break;
            case "purchase":
                Purchase();
                break;
            case "update":
                /* nop */
                break;
        }

        Bind();
    }
}
Run Code Online (Sandbox Code Playgroud)

要使__EVENTTARGET具有正确的clientId(如果使用按钮,则为空字符串)我需要使用javascript触发面板更新:

<a href="javascript:__doPostBack('<%=  pnlUpdate.ClientID %>','toggle');">
<img runat="server" ID="imgToggle" src="~/img/grid_plus.gif" title="Expandera" alt="" width="14" height="14"/>
</a>
Run Code Online (Sandbox Code Playgroud)