[英]in asp.net c# how to get the value of dynamically created controls after clicking submit button
[英]Asp.net: Page won't refresh after clicking dynamically generated Button controls
單擊任何動態生成的按鈕控件確實會調用 b_Click 方法並刪除給定的用戶,但是,在刪除頁面時不會重新加載“新”用戶列表。
protected void Page_Load(object sender, EventArgs e)
{
DbDB db = new DbDB();
List<User> users = db.GetUsers().ExecuteTypedList<User>();
foreach (User u in users)
{
Button b = new Button();
b.Text = u.FirstName;
b.Click += new EventHandler(b_Click);
PlaceHolder1.Controls.Add(b);
}
}
}
void b_Click(object sender, EventArgs e)
{
Button b = (Button)sender;
DbDB.User.Delete(x => x.FirstName == b.Text);
}
protected void Page_Load(object sender, EventArgs e) {
LoadUsers();
}
void b_Click(object sender, EventArgs e) {
Button button = (Button)sender;
string firstName = button.CommandArgument;
DbDB.User.Delete(x => x.FirstName == firstName);
PlaceHolder1.Controls.Remove(button);
}
void LoadUsers() {
DbDB db = new DbDB();
List<User> users = db.GetUsers().ExecuteTypedList<User>();
foreach (User user in Users) {
Button button = new Button();
button.CommandArgument = user.FirstName; // normally the user "id" to identify the user.
button.Text = user.FirstName;
button.Click += new EventHandler(b_Click);
PlaceHolder1.Controls.Add(button);
}
}
這是因為 Page_Load 事件是在 Click 事件之前調用的,所以當您從 Page_Load 中的數據庫中檢索用戶列表時,用戶仍然在那里。 作為一種快速解決方案,您可以將代碼從 Page_Load 移動到 PreRender 事件。
查看此鏈接以獲取有關頁面生命周期的更多信息: http://msdn.microsoft.com/en-us/library/ms178472.aspx
您不需要每次回發 select 用戶。 此外,您不需要在運行時為此創建控件。
以下是另一種方式。
<asp:Repeater runat="server" ID="myRepeater">
<ItemTemplate>
<asp:Button runat="server" OnClick="Button_Click" Text='<%# DataBinder.Eval(Container.DataItem, "FirstName") %>' />
</ItemTemplate>
</asp:Repeater>
protected void Page_Load(object sender, EventArgs e)
{
if (!this.IsPostBack)
{
// load users
myRepeater.DataSource = users;
myRepeater.DataBind();
}
}
protected void Button_Click(object sender, EventArgs e)
{
// delete user
Button button = sender as Button;
button.Visible = false;
}
在里面寫下你的 page_load 正文
if(!IsPostBack)
{
....
}
那應該行得通。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.