Asp.net C-动态按钮的事件处理程序
我有一个使用设计模式创建的文本框和提交按钮 当按下提交按钮时,它将从文本框中检索用户输入,然后对我的数据库进行查询。 然后,它将根据从我的数据库检索到的信息显示一个动态按钮列表 但是,按钮的事件处理程序在单击时不会触发。我想我的问题是回发,但我无法在页面加载等中创建这些按钮,因为我需要在按下提交按钮时从文本框获取用户输入,然后才能加载按钮 我怎样才能解决这个问题 多谢各位 编辑代码:Asp.net C-动态按钮的事件处理程序,asp.net,button,event-handling,webforms,postback,Asp.net,Button,Event Handling,Webforms,Postback,我有一个使用设计模式创建的文本框和提交按钮 当按下提交按钮时,它将从文本框中检索用户输入,然后对我的数据库进行查询。 然后,它将根据从我的数据库检索到的信息显示一个动态按钮列表 但是,按钮的事件处理程序在单击时不会触发。我想我的问题是回发,但我无法在页面加载等中创建这些按钮,因为我需要在按下提交按钮时从文本框获取用户输入,然后才能加载按钮 我怎样才能解决这个问题 多谢各位 编辑代码: 主要问题是回发如果不存在动态控件,则在每次回发时重新生成这些控件。 有关快速演示,请参见此代码 ASPX代码 A
主要问题是回发如果不存在动态控件,则在每次回发时重新生成这些控件。 有关快速演示,请参见此代码 ASPX代码 ASPX.CS代码
主要问题是回发如果不存在动态控件,则在每次回发时重新生成这些控件。 有关快速演示,请参见此代码 ASPX代码 ASPX.CS代码
在我看来,您可以轻松地重构页面,使用简单的控件,而不是向面板动态添加控件 下面是一个非常简单的完整示例: RepeaterTest.aspx
在我看来,您可以轻松地重构页面,使用简单的控件,而不是向面板动态添加控件 下面是一个非常简单的完整示例: RepeaterTest.aspx
向我们展示按钮是如何创建的。应该很容易将它们全部连接到一个单一的Evthand文件。如果你需要对用户的决策做出反应,可能的副本,这是值得考虑使用Ajax来提供你想要的功能。它可以提高你的应用程序的性能,你不必解决这样的问题。嗨,用代码编辑了我的问题。感谢您告诉我们按钮是如何创建的。应该很容易将它们全部连接到一个单一的Evthand文件。如果你需要对用户的决策做出反应,可能的副本,这是值得考虑使用Ajax来提供你想要的功能。它可以提高你的应用程序的性能,你不必解决这样的问题。嗨,用代码编辑了我的问题。谢谢你的回复。但是我有其他的按钮,它有其他的功能,如果我把generate放在ispostback中,它不会在每次页面回发时调用这个方法。谢谢你的回复。但是我有其他按钮,它有其他功能,如果我把generate放在ispostback中,它不会在每次页面回发时调用这个方法。
protected void subBtn_Click(object sender, EventArgs e)
{
//database setup codes
.......
while (reader.Read())
{
Button detailsBtn = new Button();
detailsBtn.Text = reader["fName"].ToString();
//doesn't fire
detailsBtn.Click += new EventHandler(detailsBtn_Click);
memPanel.Controls.Add(detailsBtn);
}
}
<form id="form1" runat="server">
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" />
<asp:Panel ID="pnl" runat="server"></asp:Panel>
</form>
protected void Page_Load(object sender, EventArgs e)
{
if(IsPostBack)
{
generate();
}
}
public void generate()
{
if (!pnl.HasControls())
{
for (int i = 0; i < 4; i++)
{
Button detailsBtn = new Button();
detailsBtn.Text = "fName" + i.ToString();
detailsBtn.ID = i.ToString();
detailsBtn.Click += new EventHandler(detailsBtn_Click);
pnl.Controls.Add(detailsBtn);
}
}
}
protected void Button1_Click(object sender, EventArgs e)
{
generate();
}
protected void detailsBtn_Click(object sender, EventArgs e)
{
}
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="Server">
<asp:TextBox ID="theTextBox" runat="server"></asp:TextBox>
<asp:Button ID="theButton" runat="server" OnClick="theButton_Click" Text="Click me" />
<asp:Repeater ID="test" runat="server">
<ItemTemplate>
<asp:Button ID="theRepeaterButton" runat="server" Text='<%# Eval("fName") %>' OnClick="theRepeaterButton_Click" />
</ItemTemplate>
</asp:Repeater>
</asp:Content>
public partial class RepeaterTest : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void theButton_Click(object sender, EventArgs e)
{
string filter = theTextBox.Text;
// below row simulates fetching data using the filter text in the text box
var data = Enumerable.Range(0, 20).Select(i => new { fName = filter + " " + i });
test.DataSource = data;
test.DataBind();
}
protected void theRepeaterButton_Click(object sender, EventArgs e)
{
var button = (Button)sender;
// do something here based on text/commandname/commandargument etc of the button
}
}