【问题标题】:Dynamically user control inside update panel disappear after click button inside this user control单击此用户控件内的按钮后,更新面板内的动态用户控件消失
【发布时间】:2014-09-25 11:00:42
【问题描述】:

当单击用户控件内的按钮时,它似乎没有执行其事件(按钮单击) 我只想重新加载更新面板,这个用户控件在这个按钮点击事件中产生新的效果

我像这样在更新面板内的 html 控件上添加用户控件

<!-- language: c# -->
content.Controls.Remove(content.FindControl("currentusercontrol"));
    UserControl usr1 = (UserControl)LoadControl("myusercontrol.ascx");
    usr1.ID = "currentusercontrol";
   content.Controls.Add(usr1);

这是我的父页面内容

<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="True"> </asp:ScriptManager>
 <asp:UpdatePanel ID="UpdatePanel1" runat="server" UpdateMode="Conditional" OnLoad="UpdatePanel1_Load" OnPreRender="UpdatePanel1_PreRender">

        <ContentTemplate>

    <div id="content" class="content" runat="server">
        <!-- begin breadcrumb -->

        <!-- end breadcrumb -->
        <!-- begin page-header -->
        <h1 class="page-header" runat="server" id="pageheader">Dashboard v2 <small id="smallheader" runat="server">header small text goes here...</small></h1>
        <!-- end page-header -->

    </div>
            </ContentTemplate>
        <Triggers>           
        </Triggers>           
    </asp:UpdatePanel>

这是我的用户控制页面

<%@ Control Language="C#" ClassName="Contact_Us" %>
<%@ Import Namespace="System.Threading" %>
<script runat="server">
private void Button1_OnClick(object sender, EventArgs e)
{
    Thread.Sleep(5000);
    Label1.Text = "lion";
}
</script>

<asp:ScriptManagerProxy ID="ScriptManagerProxy1" runat="server" ></asp:ScriptManagerProxy>
<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
<asp:Button ID="Button1" runat="server" CssClass="btn btn-primary" Text="Submit" OnClick="Button1_OnClick"  />

我试试这个,但它不起作用

<asp:AsyncPostBackTrigger ControlID="Button1" EventName="Click" />

我尝试将触发器直接放置到更新面板,但出现错误,因为按钮在用户控制中,所以无法使用此 id 进行控制,因此我尝试以编程方式将触发器放置在用户控件加载事件上 像这样

    UpdatePanel UpdatePanel1 = this.Parent.FindControl("UpdatePanel1") as UpdatePanel;
    AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
    trigger.ControlID = Button1.ID;
    trigger.EventName = "Click";
    UpdatePanel1.Triggers.Add(trigger);

但我有同样的错误 在 UpdatePanel 'UpdatePanel1' 中找不到触发器 ID 为 'Button1' 的控件。

然后尝试像这样为 button1 使用客户端 ID

trigger.ControlID = Button1.ClientID;

同样的问题 在 UpdatePanel“UpdatePanel1”中找不到触发器 ID 为“currentusercontrol_Button1”的控件。

【问题讨论】:

  • 每次加载页面时都必须添加动态控件。它们不存储在视图状态中。
  • 非常感谢,但问题是我的页面每次都没有加载,我有一个菜单,每次单击菜单项时,我都会使用新的用户控件刷新更新面板内的内容

标签: javascript c# jquery html asp.net


【解决方案1】:

在按钮单击并调用 UpdatePanel1.Update() 时在更新面板中修改您想要的内容(通过 asp 标签 ID);

http://msdn.microsoft.com/en-us/library/system.web.ui.updatepanel.update(v=vs.110).aspx

【讨论】:

  • 感谢您的回答,但问题是按钮单击不触发,当我单击按钮时,用户控件刚刚消失,我需要刷新更新面板内的用户控件,仅具有新效果
  • 使用 protected 或 public 代替 private void Button1_OnClick(object sender, EventArgs e) { Thread.Sleep(5000); Label1.Text = "lion"; }
  • 我都试过了,但没有改变,按钮点击不触发,用户控制消失
  • 好的,这里有两个选项:1. 包裹在&lt;ContentTemplate&gt; 内的按钮触发器或使用 2. &lt;Triggers&gt; &lt;asp:AsyncPostBackTrigger ControlID="Button1" /&gt; &lt;/Triggers&gt; 在这两种情况下都使用点击处理程序UpdatePanel1.Update();
  • 我试了一下,但直接触发更新面板,我有错误没有控制这个 id 因为按钮在用户控制中所以我试图以编程方式将触发器放在用户控制加载事件上 就像这个 UpdatePanel UpdatePanel1 = this.Parent.FindControl("UpdatePanel1") as UpdatePanel; AsyncPostBackTrigger 触发器 = new AsyncPostBackTrigger();触发器.ControlID = Button1.ID; trigger.EventName = "点击"; UpdatePanel1.Triggers.Add(trigger);对于 UpdatePanel 'UpdatePanel1' 中的触发器,我无法找到 ID 为 'Button1' 的相同错误控件。
【解决方案2】:

我发现了,我只是把这段代码放在更新面板加载中,一切都很顺利

        content.Controls.Remove(content.FindControl("currentusercontrol"));
        UserControl usr1 = (UserControl)LoadControl("myusercontrol");
        usr1.ID = "currentusercontrol";
        content.Controls.Add(usr1);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-05-21
    • 2011-07-08
    • 1970-01-01
    • 1970-01-01
    • 2012-10-25
    相关资源
    最近更新 更多