2009-07-13 120 views
1

我有一個包含PlaceHold的UpdatePanel。我創建了一些帶有標籤和按鈕的控件,當點擊按鈕時,它會觸發一個事件,清除PlaceHolder並添加一些文本框和一個帶有事件的按鈕。 問題是,當這個按鈕被點擊它看起來做一個PostBack並且不會觸發與按鈕相關的事件。我認爲,因爲這些控件都包含在UpdatePanel中,所以沒有PostBack,我是否錯過了流程。UpdatePanel其中按鈕事件不會觸發

<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server"> 

<%--<%@ Register assembly="System.Web.DynamicData, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" namespace="System.Web.DynamicData" tagprefix="cc1" %> 
--%> 

<div id="content" > <!--start content div--> 
    <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 
    <br /> 
    <asp:ScriptManager ID="ScriptManager1" runat="server"> 
    </asp:ScriptManager> 
    <br /> 
    <asp:UpdatePanel ID="upBlog" runat="server" UpdateMode="Conditional"> 
    <ContentTemplate > 

     <asp:PlaceHolder ID="phBlog" runat="server"></asp:PlaceHolder> 
    </ContentTemplate> 
    <Triggers > 
<%-- <asp:AsyncPostBackTrigger EventName="Click" ControlID = "btnSave" />--%> 
    </Triggers> 
    </asp:UpdatePanel> 
    <br /> 
</div> <!--ends content div--> 

</asp:Content> 

//代碼隱藏

protected override void OnInit(EventArgs e) 
{ 
    base.OnInit(e); 
    FirstView(); 
} 
protected void Page_Load(object sender, EventArgs e) 
{ 

} 

private void FirstView() 
{ 
    FileStream fs = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Open, FileAccess.Read, FileShare.ReadWrite); 
    DataSet dset = new DataSet(); 
    dset.ReadXml(fs); 
    fs.Close(); 
//other controls 
     Button btnComments = new Button(); 
     btnComments.ID = "mybtnComments" + i.ToString(); 
     btnComments.BorderWidth = 0; 
     btnComments.Text = MyFunc.CountComments(row["ID"].ToString(), dset) + " Comments"; 
     phBlog.Controls.Add(btnComments); 
     btnComments.CommandArgument = row["ID"].ToString(); 
     btnComments.BorderWidth = 0; 

     btnComments.Command += new CommandEventHandler(Button1_Click) 

} 


private void CommentView(string ID) /// THIS DOES not FIRE 
{ 
    DataView myCommentView = GetCommentView(ID); 

     Button btnCommentSave = new Button(); 
     btnCommentSave.ID = "mySavebtnComments" + i.ToString(); 
     btnCommentSave.Text = "Publish"; 
     btnCommentSave.BackColor = Color.Aquamarine; 
     phBlog.Controls.Add(btnCommentSave); 
     btnCommentSave.CommandArgument = row["ID"].ToString(); 
     btnCommentSave.Click += new EventHandler(btnSave_Click); 


} 




protected void Button1_Click(object sender, CommandEventArgs e) 
{ 
    CommentView(e.CommandArgument.ToString()); 
} 

protected void btnSave_Click(object sender, EventArgs e) 
//protected void btnSave_Click(object sender, CommandEventArgs e) 
{ 
    FileStream fsxml = new FileStream(Server.MapPath(GlobalVar.compathver), FileMode.Truncate, FileAccess.Write, FileShare.ReadWrite); 

    //other code 
    // XML Document Saved 
    xmldoc.Save(fsxml); 
} 
+0

你能發表一個標記的例子嗎? – 2009-07-13 19:00:07

回答

0

在UpdatePanel仍然沒有回發。當點擊按鈕時,整個頁面生命週期會重複,因此Page_Init和Page_Load會再次執行。 AJAX不會刪除郵箱,只是將其從客戶端隱藏。

我無法明確地看到你發佈的代碼有錯誤,但我建議你在Page_Init中放置一個斷點作爲開始。這將能夠告訴你回發是否真的發生,因爲如果按鈕確實試圖觸發按鈕單擊事件,則會觸發此回發。請記住,在頁面生命週期完成後(理論上)會觸發任何點擊事件。

第二次看,我建議你將FirstView()方法中的Button事件改爲Click而不是Command,看看是否觸發事件。

+0

請提供任何解決方案,代碼等。如何解決此問題。看看[我的問題](http://stackoverflow.com/questions/18042263/link-button-click-event-does-not-fire-in-update-panel)看看你能否回答 – 2013-08-04 20:38:29

0

在將控件添加到其他容器之前,最好將任何事件添加到控件中。

其次,參數名稱爲「btnCommentSave」的按鈕不起作用。你必須小心OnInit,OnLoad事件。這是服務器端客戶端問題。從服務器推送到客戶端的頁面不包含「btnCommentSave」按鈕,因此該按鈕停留在客戶端頁面,但不起作用。

btnComments的作品,因爲它是由服務器呈現之前推送到UpdatePanel的OnLoad函數的客戶端。

OnLoad函數後呈現的內容無效。