这里的UpdatePanel按钮事件不火(UpdatePanel where Button Even

2019-07-30 03:43发布

我有一个包含在它PLACEHOLD一个UpdatePanel的。 我创建标签和按钮某些控件,点击按钮火灾时扫清占位符,并且增加了一些文本框和一个按钮的事件的事件。 问题是,当这个按钮被点击它似乎做了回发和不触发与按钮相关的事件。 我想,既然这些控制都包含在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);
 }

Answer 1:

在UpdatePanel仍然没有回发。 单击该按钮时,重复整个页面生命周期,因此例如Page_Init和Page_Load中会再次执行。 AJAX不会删除邮箱,只是隐藏它从客户端。

我不能很明显的看出什么问题,但是你已经发布,我建议你把一个破发点中Page_Init作为开始的代码。 这将可以告诉你,如果回传实际发生与否,因为这会如果按钮确实试图触发按钮单击事件被解雇。 请记住页面生命周期完成后(理论上)的任何点击事件被触发。

在第二次看我会建议你在的firstView()方法的按钮事件更改为点击而不是一个命令,看看这个触发事件。



Answer 2:

最好是添加控件到另一个容器之前添加任何事件的控制。

其次与参数名“btnCommentSave”按钮将无法正常工作。 你必须要小心的OnInit,的OnLoad事件。 这是服务器客户端的问题。 从服务器推送到客户端的页面不包括“btnCommentSave”按钮,这样该按钮停留在客户端页面,但它不工作。

btnComments的作品,因为它是由服务器在UpdatePanel中的OnLoad功能推到客户面前呈现。

之后的OnLoad功能呈现什么,不能正常工作。



文章来源: UpdatePanel where Button Event does not fire