In einem meiner Projekte muss ich eine ASP.NET-Seite erstellen und einige der Steuerelemente müssen dynamisch erstellt werden. Diese Steuerelemente werden der Seite durch die Code-Behind-Klasse hinzugefügt und sie haben einige Event-Handler, die ihnen hinzugefügt werden. Bei den PostBacks haben diese Event-Handler viel damit zu tun, welche Steuerelemente dann auf der Seite angezeigt werden. Um die Geschichte kurz zu machen, funktioniert dies nicht für mich und ich scheine nicht in der Lage zu sein, dies herauszufinden.
Da mein Projekt ziemlich kompliziert ist, habe ich beschlossen, ein kurzes Beispiel zu erstellen, das auch nicht funktioniert, aber wenn Sie es so ändern können, dass es funktioniert, wäre das großartig, und ich wäre dann in der Lage, Ihre Lösung auf mein ursprüngliches Problem anzuwenden.
Das folgende Beispiel soll drei Schaltflächen auf einem Panel dynamisch erstellen. Wenn eine der Schaltflächen gedrückt wird, sollen alle Schaltflächen dynamisch neu erstellt werden, mit Ausnahme der Schaltfläche, die gedrückt wurde. Mit anderen Worten, blenden Sie einfach die Schaltfläche aus, die der Benutzer drückt, und zeigen Sie die beiden anderen an.
Damit Ihre Lösung hilfreich ist, können Sie die Schaltflächen nicht statisch erstellen und dann die Eigenschaft Visible verwenden (oder das Beispiel auf andere Weise drastisch ändern) - Sie müssen alle Schaltflächensteuerelemente bei jedem PostBack dynamisch neu erstellen (allerdings nicht unbedingt im Event-Handler). Dies ist keine Trick-Frage - ich weiß wirklich nicht, wie man das macht. Vielen Dank für Ihre Mühe. Hier ist mein kurzes Beispiel:
Aus der Datei Default.aspx:
<body>
<form id="form1" runat="server">
<div>
<asp:Panel ID="ButtonsPanel" runat="server"></asp:Panel>
</div>
</form>
</body>
In der Code-Behind-Datei 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();
}
}
}
Mein Beispiel zeigt die drei Schaltflächen, und wenn ich auf eine der Schaltflächen klicke, wird die gedrückte Schaltfläche ausgeblendet. Scheint zu funktionieren; aber nach diesem ersten Klick muss ich auf jede Schaltfläche klicken ZWEIMAL damit es versteckt wird. !?