从另一个控件中的控件刷新asp.net页面

时间:2010-01-26 19:57:24

标签: asp.net user-controls refresh

我想在有人点击“添加”按钮后刷新我的asp.net页面。但是,“添加”按钮是另一个用户控件内部的用户控件的一部分,并且子控件和父控件都包含在更新面板中:下面的代码被缩短显示,用户控件在另一个用户控件中的原因< / p>

内部第一控制:

<ajax:UpdatePanel ID="Panel1" runat="server" UpdateMode="Always">
   <ContentTemplate>
             <uc:Control2 ID="Custom2" runat="server" />
   </ContentTemplate>
</ajax:UpdatePanel>

然后在control2里面

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always">
   <ContentTemplate>
             <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton>
   </ContentTemplate>
</ajax:UpdatePanel>

5 个答案:

答案 0 :(得分:5)

如果您想重新加载整个页面(而不仅仅是UpdatePanels的内容),您可以这样做:

Page.Response.Redirect("mypagename.aspx");

答案 1 :(得分:1)

假设您无法控制父用户控件,可以通过搜索父用户控件(FindControl)的子控件来查找控件。然后,一旦你有了它的引用,你可以添加一个事件处理程序:

btnAddButton.OnClick += new EventHandler(MethodThatRefreshesPage);

由于您处于更新面板中,因此您需要执行Response.Redirect(Request.RawUrl)之类的操作来刷新整个页面。

当然,如果您确实可以控制父用户控件,那么您可以创建自己的“AddClicked”事件并将订阅传递给链接按钮。或者您可以将LinkBut​​ton本身作为公共属性公开用户控制。

答案 2 :(得分:0)

我假设您要刷新页面,以便在页面中显示新添加的项目...正确吗?如果是这样,那么您可以将数据控件数据绑定为AddButton_Click事件的一部分。例如,如果您有一个显示项目的网格,那么用户单击Add按钮添加一个新项目,您可以将以下代码放入AddButton_Click事件中以“刷新”数据控件的内容并显示新添加的内容项:

protected void AddButton_Click(object sender, EventArgs e)
    {
       myGrid.DataBind();
    }

希望这有帮助。

答案 3 :(得分:0)

事件冒泡(http://odetocode.com/code/94.aspx)怎么样?

答案 4 :(得分:0)

您没有指定脚本管理器的配置,但假设您配置了脚本管理器,如下所示:

<ajax:ScriptManager runat="server" ID="myScriptManager" EnablePartialRendering="true"></ajax:ScriptManager>

然后将此Trigger添加到Control2的UpdatePanel模板中,使其如下所示:

<ajax:UpdatePanel ID="Panel2" runat="server" UpdateMode="Always">
    <ContentTemplate>
        <asp:LinkButton ID="AddButton" runat="server" OnClick="AddButton_Click"</asp:LinkButton>
    </ContentTemplate>
    <Triggers>
         <asp:PostBackTrigger ControlID="AddButton" />
    </Triggers>
 </ajax:UpdatePanel>

这将触发一个PostBack,它允许您重新加载任何绑定数据(在Page_Load中),并且还将重新呈现整个页面而不仅仅是内部更新面板的内容。