【问题标题】:Refreshing an asp.net page from a control in another control从另一个控件中的控件刷新 asp.net 页面
【发布时间】: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 的回答。

标签: asp.net user-controls refresh


【解决方案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) 怎么样?

        【讨论】:

          猜你喜欢
          • 2011-11-11
          • 2010-12-21
          • 1970-01-01
          • 2018-12-16
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多