UpdatePanel(ASP),动态插入新对象时丢失插入的对象

vaqhlq81  于 2023-03-20  发布在  .NET
关注(0)|答案(1)|浏览(98)

我正在尝试插入一个对象(Panel)在UpdatePanel类型对象中的一个接一个(通过按钮),这是为了形成一个数组,当用户在UpdatePanel中插入它时,它在视觉上看起来是水平的。我遇到的问题是,每次我插入一个新对象,它都会删除前一个,也就是说,我插入对象2,它删除1,如果我插入对象3,它会删除2,以此类推,只在里面插入一个对象。2我使用的两个文本框是用来控制位置和知道我已经有多少对象在里面。
我使用UpdatePanel,正是为了避免丢失我插入的那些对象,因为每个对象在数组中都有一个特定的操作。

如何避免丢失已插入的对象?有什么想法吗?

这是我正在使用的代码

Protected Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click

        Dim PanelS As Panel

        Dim pos As Int32 = Val(TextBox1.Text)
        Dim numPanel As Int32 = Val(TextBox2.Text)

        PanelS = New Panel
        PanelS.ID = "pnl" & (numPanel + 1)
        PanelS.Style.Add(HtmlTextWriterStyle.Height, "500px")
        PanelS.Style.Add(HtmlTextWriterStyle.Width, "110px")
        PanelS.Style.Add(HtmlTextWriterStyle.Left, pos.ToString & "px")
        PanelS.Style.Add(HtmlTextWriterStyle.Position, "absolute")
        PanelS.Style.Add(HtmlTextWriterStyle.BackgroundImage, "~/Images/W1.jpg")
        UpdatePanel1.ContentTemplateContainer.Controls.Add(PanelS)
        TextBox1.Text += 110
        TextBox2.Text += 1

    End Sub

在ASP中我用的是

<asp:Content ID="BodyContent" ContentPlaceHolderID="MainContent" runat="server">
    <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
    <div class="jumbotron">
    <div class="row">
            <asp:Button ID="Button1" runat="server" Text="INSERT MOD" Width="120px" />
    </div>

    <div class="row">
        <div class="col-md-12">
                <asp:UpdatePanel ID="UpdatePanel1" runat="server">
                        <ContentTemplate>
                                <asp:TextBox ID="TextBox2" runat="server">0</asp:TextBox>
                                <asp:TextBox ID="TextBox1" runat="server">20</asp:TextBox>
                        </ContentTemplate>
                </asp:UpdatePanel>
        </div>
   </div>
   </div>
</asp:Content>

等待您的评论...提前感谢您。

xtfmy6hx

xtfmy6hx1#

问题是在回发的时候你的UpdatePanel被重置了。这需要加强一点来处理添加第一个,等等。你可能需要使用Page_PreRender而不是Page_Load。我建议阅读页面的生命周期。最后一个是重复的,但是它应该会让你走上正确的轨道。
另外,它是C#,因为我对VB不太熟悉。尽管原理是相同的。

protected void Page_Load(object sender, EventArgs e)
{
    var numPanel = Int32.Parse(TextBox2.Text);
    for (int i = 0; i < numPanel; i++)
    {
        var PanelS = new Panel();
        PanelS.ID = "pnl" + (i + 1);
        PanelS.Style.Add(HtmlTextWriterStyle.Height, "500px");
        PanelS.Style.Add(HtmlTextWriterStyle.Width, "110px");
        PanelS.Style.Add(HtmlTextWriterStyle.Left, (i * 110).ToString() + "px");
        PanelS.Style.Add(HtmlTextWriterStyle.Position, "absolute");
        PanelS.Style.Add(HtmlTextWriterStyle.BackgroundImage, "~/Images/W1.jpg");
        UpdatePanel1.ContentTemplateContainer.Controls.Add(PanelS);
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    var pos = Int32.Parse(TextBox1.Text);
    var numPanel = Int32.Parse(TextBox2.Text);

    var PanelS = new Panel();
    PanelS.ID = "pnl" + (numPanel + 1);
    PanelS.Style.Add(HtmlTextWriterStyle.Height, "500px");
    PanelS.Style.Add(HtmlTextWriterStyle.Width, "110px");
    PanelS.Style.Add(HtmlTextWriterStyle.Left, pos.ToString() + "px");
    PanelS.Style.Add(HtmlTextWriterStyle.Position, "absolute");
    PanelS.Style.Add(HtmlTextWriterStyle.BackgroundImage, "~/Images/W1.jpg");
    UpdatePanel1.ContentTemplateContainer.Controls.Add(PanelS);

    TextBox1.Text = (pos + 110).ToString();
    TextBox2.Text = (numPanel + 1).ToString();
}

**编辑:**使用Page_PreRender示例,其行为与所述方式更接近:

protected void Page_PreRender(object sender, EventArgs e)
{
    var numPanel = Int32.Parse(TextBox2.Text);
    for (int i = 0; i < numPanel; i++)
    {
        var PanelS = new Panel();
        PanelS.ID = "pnl" + (i + 1);
        PanelS.Style.Add(HtmlTextWriterStyle.Height, "500px");
        PanelS.Style.Add(HtmlTextWriterStyle.Width, "110px");
        PanelS.Style.Add(HtmlTextWriterStyle.Left, (i* 110).ToString() + "px");
        PanelS.Style.Add(HtmlTextWriterStyle.Position, "absolute");
        PanelS.Style.Add(HtmlTextWriterStyle.BackgroundImage, "~/Images/W1.jpg");
        UpdatePanel1.ContentTemplateContainer.Controls.Add(PanelS);
    }
}

protected void Button1_Click(object sender, EventArgs e)
{
    var pos = Int32.Parse(TextBox1.Text);
    var numPanel = Int32.Parse(TextBox2.Text);

    TextBox1.Text = (pos + 110).ToString();
    TextBox2.Text = (numPanel + 1).ToString();
}

相关问题