UpdatePanel динамически загружаемый веб-пользовательский элемент управления исчезнет после нажатия любой кнопки внутри пользовательского элемента управления - PullRequest
1 голос
/ 17 марта 2011

У меня есть страница ASP.Net (Default.aspx), которая будет динамически загружать UserControl (ucontrol.ascx) в UpdatePanel.Используя UpdatePanel, мы считаем, что можем предотвратить публикацию всей страницы.

Моя проблема в том, что в UserControl у нас есть некоторые элементы управления формой, такие как входы и кнопки;после загрузки UserControl нажатие любой кнопки внутри UserControl приведет к отключению панели обновления.В ходе расследования я обнаружил, что точки останова внутри Button1_Click () в коде для UserControl никогда не достигаются.Пожалуйста, ссылка на код ниже, это ссылки на [ССЫЛКА] 1 .Это срочное задание, пожалуйста, помогите.

Спасибо!William

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true"  CodeFile="Default.aspx.cs" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Untitled Page</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server" EnablePartialRendering="true">
        </asp:ScriptManager>

        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <span>This is hosting page</span><br />
                <asp:Button ID="Button1" runat="server" onclick="Button1_Click" Text="Add UserControl" />
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" />
            </Triggers>
        </asp:UpdatePanel>

        <asp:UpdatePanel ID="UpdatePanel2" runat="server" UpdateMode="Conditional">
            <ContentTemplate>
                <asp:PlaceHolder ID="PartHolder" runat="server">
                </asp:PlaceHolder>
            </ContentTemplate>
            <Triggers>
                <asp:AsyncPostBackTrigger ControlID="Button1" />
            </Triggers>
        </asp:UpdatePanel>

     </form>
</body>
</html>

Default.aspx.cs:

using System;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class _Default : System.Web.UI.Page 
{

    protected void Page_Load(object sender, EventArgs e)
    {
    }

    protected void Button1_Click(object sender, EventArgs e)
    {
        loadparts();
    }

    private void loadparts(){
        Control formpart =  LoadControl("ucontrol.ascx");
        formpart.ID = "formpart";
        PartHolder.Controls.Add(formpart);
    }
}

ucontrol.ascx:

<%@ Control Language="C#" AutoEventWireup="true" CodeFile="ucontrol.ascx.cs" Inherits="ucontrol" %>

        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
        &nbsp;This is Web User Control in UpdatePanel<br />
        &nbsp;<br />
        &nbsp;<br />
        <asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>
        <asp:Button ID="Button1" runat="server" Text="Button" OnClick="Button1_Click"/>

ucontrol.ascx.cs:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;

public partial class ucontrol : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        Label1.Text = TextBox1.Text;
        TextBox1.Text = "";
        TextBox1.Focus();
    }
}

Ответы [ 3 ]

1 голос
/ 17 марта 2011

Вот что происходит:

  1. Загрузка первой страницы.Пользовательский элемент управления на странице отсутствует.
  2. Пользователь нажимает кнопку Button1 на странице.
  3. Страница отправляет назад (панели обновления выполняют полную обратную передачу за кулисами), и ваш обработчик Button1_Click на странице запускается, чтозагружает пользовательский элемент управления на страницу.
  4. Теперь пользователь видит пользовательский элемент управления и нажимает кнопку ITS Button1.
  5. Страница отправляет назад, но на этот раз обработчик Button1_Click на странице не запускается (была нажата другая кнопка, даже если вы назвали их одинаково).Это означает, что loadparts() не вызывается и пользовательский элемент управления НЕ загружается в дерево элементов управления.
  6. Ваш обработчик Button1_Click в пользовательском элементе управления не запущен, поскольку пользовательский элемент управления отсутствуетчтобы увидеть, что кнопка была нажата.

Что вам нужно сделать, это убедиться, что пользовательский элемент управления загружен в дерево элементов управления страницы, даже когда вы нажимаете кнопку пользовательского элемента управления.Вот почему Эндрю предложил вам поместить loadparts () в событие Page_Load.Я вижу, что это не соответствует потоку вашей страницы, поэтому вам придется найти другой способ загрузить ее в нужное время.

0 голосов
/ 14 марта 2012

Это сработало для меня:

protected void Page_Load(object sender, EventArgs e)
{
    if(isPostBack)
    {
       loadparts();
    }
}
0 голосов
/ 17 марта 2011

попробуйте поместить метод loadparts () в

protected void Page_Load(object sender, EventArgs e)
{
    if(!isPostBack)
    {
       loadparts();
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...