从另一个控件中的控件刷新 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”事件并将订阅传递给链接按钮。或者您可以将 LinkButton 本身作为公共属性公开用户控制。
【讨论】:
【参考方案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 页面的主要内容,如果未能解决你的问题,请参考以下文章