UpdatePanel, где не запускается Button Event - PullRequest
1 голос
/ 13 июля 2009

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

<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);
 }

Ответы [ 2 ]

0 голосов
/ 07 апреля 2011

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

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

btnComments работает, потому что он отрисовывается сервером перед отправкой клиенту с помощью функции OnPoel в UpdatePanel.

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

0 голосов
/ 14 июля 2009

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

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

При втором просмотре я бы предложил изменить событие Button в методе FirstView () на Click, а не на Command, и посмотреть, вызывает ли это событие.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...