gpt4 book ai didi

c# - 如何使用 EventHandlers 在 ASP.NET 页面中动态创建/删除控件?

转载 作者:行者123 更新时间:2023-11-30 14:21:04 30 4
gpt4 key购买 nike

在我的一个项目中,我需要构建一个 ASP.NET 页面,并且需要动态创建一些控件。这些控件由代码隐藏类添加到页面,并且向它们添加了一些事件处理程序。在 PostBacks 上,这些事件处理程序与随后在页面上显示的控件有很大关系。简而言之,这对我不起作用,而且我似乎无法弄清楚。

因此,由于我的项目非常复杂,我决定创建一个简短的示例,它也不起作用,但如果您可以调整它以使其起作用,那就太好了,然后我就可以应用您的解决方案到我原来的问题。

以下示例应在面板上动态创建三个按钮。当按下其中一个按钮时,除了按下的按钮之外,所有按钮都应该动态重新创建。换句话说,只是隐藏用户按下的按钮并显示其他两个。

为了使您的解决方案有所帮助,您不能静态创建按钮然后使用 Visible 属性(或以其他方式彻底更改示例)- 您必须在每次 PostBack 时动态地重新创建所有按钮控件(不是尽管必须在事件处理程序中)。这不是一个技巧问题 - 我真的不知道该怎么做。非常感谢你的努力。这是我的简短示例:

来自 Default.aspx 文件:

<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="ButtonsPanel" runat="server"></asp:Panel>
</div>
</form>
</body>

来自 Default.aspx.cs 代码隐藏文件:

using System;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace DynamicControls
{
public partial class _Default : Page
{
protected void Page_Load(object sender, EventArgs e)
{
AddButtons();
}

protected void AddButtons()
{
var lastClick = (string) Session["ClickedButton"] ?? "";

ButtonsPanel.Controls.Clear();
if (!lastClick.Equals("1")) AddButtonControl("1");
if (!lastClick.Equals("2")) AddButtonControl("2");
if (!lastClick.Equals("3")) AddButtonControl("3");
}

protected void AddButtonControl(String id)
{
var button = new Button {Text = id};
button.Click += button_Click;
ButtonsPanel.Controls.Add(button);
}

private void button_Click(object sender, EventArgs e)
{
Session["ClickedButton"] = ((Button) sender).Text;
AddButtons();
}
}
}

我的示例显示了三个按钮,当我单击其中一个按钮时,按下的按钮将被隐藏。似乎有效;但是在第一次点击之后,我必须点击每个按钮 两次 才能隐藏它。 !?

最佳答案

我认为每次添加按钮时都必须为按钮提供相同的 ID,例如(在 AddButtonControl 方法的第一行):

var button = new Button { Text = id , ID = id };

编辑 - 我不使用 session 的解决方案:

public partial class _Default : Page
{
protected override void OnPreInit(EventArgs e)
{
base.OnPreInit(e);
AddButtons();
}

protected void AddButtons()
{
AddButtonControl("btn1", "1");
AddButtonControl("btn2", "2");
AddButtonControl("btn3", "3");
}

protected void AddButtonControl(string id, string text)
{
var button = new Button { Text = text, ID = id };
button.Click += button_Click;
ButtonsPanel.Controls.Add(button);
}

private void button_Click(object sender, EventArgs e)
{
foreach (Control control in ButtonsPanel.Controls)
control.Visible = !control.Equals(sender);
}
}

关于c# - 如何使用 EventHandlers 在 ASP.NET 页面中动态创建/删除控件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/254993/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com