2009-07-13 2 views
1

У меня есть UpdatePanel с содержимым PlaceHold. Я создаю некоторые элементы управления с помощью меток и кнопок, когда кнопка нажата, она запускает событие, которое очищает PlaceHolder и добавляет некоторые текстовые поля и кнопку с событием. Проблема заключается в том, что эта кнопка нажимает кнопку «Отправить PostBack» и не запускает событие, связанное с Button. Я думал, что, поскольку эти элементы управления содержатся в UpdatePanel, это не будет PostBack, я пропускаю поток.UpdatePanel где Button Событие не срабатывает

<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

Можете ли вы опубликовать пример разметки? –

ответ

0

UpdatePanel все еще делает постбэк. Весь жизненный цикл страницы повторяется при нажатии кнопки, поэтому, например, страницы_Интер и Page_Load будут снова выполнены. AJAX не удаляет почтовый ящик, просто скрывает его от клиента.

Я не вижу, очевидно, что-то не так с кодом, который вы опубликовали, но я бы предложил разместить точку разрыва в Page_Init в начале. Это позволит вам сказать, действительно ли происходит обратная передача, так как это будет запущено, если кнопка действительно пытается запустить событие нажатия кнопки. Помните, что после того, как жизненный цикл страницы завершен (теоретически), все события кликов запускаются.

Во втором взгляде я бы предположил, что вы изменили событие Button в методе FirstView() на Click, а не на команду, и посмотрите, вызывает ли это событие событие.

+0

Просьба предоставить любое решение, код и т. Д. Как решить эту проблему. Взгляните на [мой вопрос] (http://stackoverflow.com/questions/18042263/link-button-click-event-does-not-fire-in-update-panel) посмотреть, можете ли вы ответить –

0

лучше добавить любое событие в элемент управления, прежде чем добавлять элемент управления в другой контейнер.

Во-вторых, кнопка с именем параметра «btnCommentSave» не будет работать. Вы должны быть осторожны с событиями OnInit, OnLoad. Это проблема с сервером-клиентом. Страница, перемещаемая с сервера на клиент, не включает кнопку «btnCommentSave», так что эта кнопка остается на странице клиентов, но она не работает.

btnComments работает, потому что он отображается сервером перед нажатием на клиент в функции OnLoad UpdatePanel.

Что отображалось после функций OnLoad, не работает.

Смежные вопросы