0
我具有被動態添加根據條件,是否顯示一個或另外兩個了LinkButton。這些按鈕也有事件。第一click_event進行燒成之後,第二click_event不觸發
首先顯示的按鈕的事件觸發,但在條件發生變化,顯示第二個按鈕,它不會觸發事件。
源代碼:
//conditions
bool wantToChangeBlogPost = false;
string textBoxOnChangeID = "";
protected void displayBlogPost()
{
SomeArraylist[] arr = valuesFromDdataBase();
foreach(BlogPost y in arr)
{
string contentStr = y.BlogMailingText;//"some content in mailing";
//div for displaying content in webpage
System.Web.UI.HtmlControls.HtmlGenericControl contentDIV = new
System.Web.UI.HtmlControls.HtmlGenericControl("div");
contentDIV.InnerHtml = contentStr;
//TB for changes
TextBox TBcontent = new TextBox();
TBcontent.Text = contentStr;
TBcontent.AutoPostBack = true;
TBcontent.TextMode = TextBoxMode.MultiLine;
TBcontent.Wrap = true;
TBcontent.ReadOnly = true;
TBcontent.EnableViewState = true;
//two different buttons for cases, whether or not want to change the text
//of blogPost
LinkButton changePost = new LinkButton();
changePost.Text = "Change MailingText";
LinkButton savePost = new LinkButton();
savePost.Text = "Save Changes";
//id 's are needed for controls
TBcontent.ID = "content-" + y.Id;
contentDIV.ID = "contentDIV-" + y.Id;
changePost.ID = "changePost-" + y.Id;
savePost.ID = "savePost-" + y.Id;
changePost.CommandArgument = "content-" + y.Id;
savePost.CommandArgument = "content-" + y.Id;
//Add these controls to the placeholder, which is defined in asmx:
//initially add only the contentDiv
myPlaceHolder.Controls.Add(contentDiv);
///////////////////////////
// HERE IS THE PROBLEM: //
///////////////////////////
//Conditions determing when to display one or another linkbutton and
//TBcontent
if (wantToChangeBlogPost == true && textBoxOnChangeID == "content-" + y.Id)
{
savePost.Click += new EventHandler(save_click);
//HERE IS THE PROBLEM: this event never fires :(
contentDIV.InnerHtml = "";
TBcontent.ReadOnly = false;
TBcontent.Visible = true;
// this button is displayd when someone has clicked on button
//'changePost'
myPlaceHolder.Controls.Add(savePost);
}
else
{
changePost.Click += new EventHandler(changePost_Click);
contentDIV.InnerHtml = contentStr;
TBcontent.ReadOnly = true;
TBcontent.Visible = false;//initially the TB is not visible
//initially the bool is false and
// this button is displayd
myPlaceHolder.Controls.Add(changePost);
}
}
//event methods for both buttons
//AFTER THIS METHOD COMPLETED I WANT TO DISPLAY THE ANOTHER LINKBUTTON
//'savePost' WITH ANOTHER EVENT 'save_click'
protected void changePost_Click(object sender, EventArgs e)
{
LinkButton LB = sender as LinkButton;
//CONDITIONS
textBoxOnChangeID = LB.CommandArgument;
wantToChangeBlogPost = true;
//GO TO THE DISPLAYING METHOD AGAIN
displayBlogPost();
}
//THIS METHOD NEVER EVEN FIRES! WHY??????
protected void save_click(object sender, EventArgs e)
{
LinkButton LB = sender as LinkButton;
//CONDITIONS
textBoxOnChangeID = "";
wantToChangeBlogPost = false;
//some logic to send changed data to the database to upload
//datatable
uploadWithChangedDataInTextBox();
//GO TO THE DISPLAYING METHOD AGAIN
displayBlogPost();
}
}
一個很好的資源,以獲取有關動態控件和回發會http://forums.asp.net/t/1186195.aspx/1更深入的瞭解 –