【问题标题】:How to fire an event of a page in Async mode a button inside an UpdatePanel inside a UserControl?如何在异步模式下触发页面事件在 UserControl 内的 UpdatePanel 内的按钮?
【发布时间】:2014-08-06 20:27:02
【问题描述】:

已编辑...

我在 UserControl 中的 UpdatePanel 中获得了一个 ASP.NET 按钮。

我想通过单击 UserControl 的按钮 (btnSubmit) 使图像可见。

使用下面的 js 函数,我可以在正常的回发模式下做到这一点,但它在异步模式下不起作用。

问题是,我如何在异步模式下执行此操作,或者最好的方法是什么?

用户控制(类别):

<asp:UpdatePanel ID="upItems" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
<asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClientClick="btnSubmitPostBack();"/>
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

ASP.NET 页面

<script>
    function btnSubmitPostBack() {
        __doPostBack('<%= btnDoSomething.ClientID %>', '');
    }
</script>

<asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional">
    <ContentTemplate>
            <uc1:Categories ID="Categories1" runat="server" CatRootName="Products" />
            <asp:Button ID="btnDoSomething" CssClass="hidden" runat="server" Text=" Do Something" OnClick=" btnDoSomething_Click" />
             <asp:Image ID="Image1" runat="server" Visible="false" />
    </ContentTemplate>
    <Triggers>
        <asp:AsyncPostBackTrigger ControlID="btnDoSomething" EventName="Click" />
    </Triggers>
</asp:UpdatePanel>

protected void btnDoSomething_Click(object sender, EventArgs e)
{
    Image1.Visible = true;
    up.Update();
}

提前感谢您的关注和帮助!

【问题讨论】:

    标签: c# asp.net updatepanel asyncpostbackerror


    【解决方案1】:

    好的,我们开始:(刚刚编译并成功运行),我认为这是正确的方法:(这里的关键是找到另一个用户控件并在其中钻取以便您的控件更新:

    你的用户控制代码:

    <%@ Control Language="C#" AutoEventWireup="true" CodeBehind="Categories.ascx.cs" Inherits="WebApplication1.Categories" %>
    
    <asp:UpdatePanel ID="upItems" runat=*emphasized text*"server" UpdateMode="Conditional">
        <ContentTemplate>
    <asp:Button ID="btnSubmit" runat="server" Text="Submit" OnClick="btnSubmit_Click"/>
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnSubmit" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    

    后面的用户控制代码:

     protected void btnSubmit_Click(object sender, EventArgs e)
            {
                UpdatePanel ImageUpdatePanel = (UpdatePanel)this.Parent.FindControl("up");
    
                Image _img = (Image)ImageUpdatePanel.FindControl("Image1");
    
                _img.Visible = true;
                //Updating UpdatePanel
                ImageUpdatePanel.Update();
            }
    

    然后是你的页面代码

        <asp:UpdatePanel ID="up" runat="server" UpdateMode="Conditional">
        <ContentTemplate>
                <uc1:Categories ID="Categories1" runat="server" CatRootName="Products" />
                <asp:Button ID="btnDoSomething" CssClass="hidden" runat="server" Text=" Do Something"/>
                 <asp:Image ID="Image1" runat="server" Visible="false" ImageUrl="~/Images/heroAccent.png" />
        </ContentTemplate>
        <Triggers>
            <asp:AsyncPostBackTrigger ControlID="btnDoSomething" EventName="Click" />
        </Triggers>
    </asp:UpdatePanel>
    

    这是 100% 有效的解决方案,如果您需要,我也可以将代码发送给您 :)

    【讨论】:

    • 关于你的回答我试过了,但没有奏效。我也更新了我的问题。还是谢谢!
    • 请看编辑,我已经重新编码并得到了你想要的结果!
    • 干得好!他们这里的关键是this.Parent.FindControl()。我不知道这样的事情是可能的。非常感谢!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-05-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多