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

Posted

技术标签:

【中文标题】从另一个控件中的控件刷新 asp.net 页面【英文标题】:Refreshing an asp.net page from a control in another control 【发布时间】:2011-01-09 16:12:47 【问题描述】:

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

在第一个控件内部:

<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>

【问题讨论】:

同样,我在 UserControl 中有一个带有添加按钮的 UserControl(它向我的数据库添加了一条记录)。单击一次添加按钮后,然后单击浏览器刷新按钮 - 浏览器将重新发布表单,接受重新发布重新触发之前的 Add 事件,导致广告重复添加操作。 Response.Redirect(parent-page) 解决了这个问题。请参阅@keltex 的回答。 【参考方案1】:

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

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

【讨论】:

页面是动态生成的。我可以做类似 Response.Redirect(Page.Url) 之类的事情吗? 是的。那可能会奏效。 Response.Redirect(Page.Request.Url.AbsolutePath)【参考方案2】:

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

btnAddButton.OnClick += new EventHandler(MethodThatRefreshesPage);

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

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

【讨论】:

【参考方案3】:

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

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

希望这会有所帮助。

【讨论】:

【参考方案4】:

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

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

然后将此触发器添加到 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 中),并且还会重新渲染整个页面,而不仅仅是内部更新面板的内容。

【讨论】:

【参考方案5】:

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

【讨论】:

以上是关于从另一个控件中的控件刷新 asp.net 页面的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET服务器控件打开新窗口怎样做到不刷新原页面

asp.net服务器控件刷新无法保存住值怎么解决?

为啥ASP.net中动态控件在刷新后不能

asp.net中如何使控件内容在本页面跳转不刷新

(asp.net)点击按钮进行相应操作,怎么实现页面无刷新

asp.net 局部跳转无刷新怎么写?