那里的UpdatePanel按钮事件不火 [英] UpdatePanel where Button Event does not fire

查看:93
本文介绍了那里的UpdatePanel按钮事件不火的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我有包含在其中一个PLACEHOLD一个UpdatePanel的。我创建标签和按钮一些控制,按钮被点击时,大火清除占位符,并且增加了一些文本框和一个按钮的事件的事件。 问题是,当这个按钮被点击它似乎做了回发和不触发与按钮相关的事件。我想,既然这些控制都包含在UpdatePanel内就没有回传,我错过了流量。

 < ASP:内容ID =内容2ContentPlaceHolderID =ContentPlaceHolder1=服务器>

<% - <%@注册的组件=System.Web.DynamicData,版本= 3.5.0.0,文化=中性公钥= 31bf3856ad364e35命名空间=System.Web.DynamicData标签preFIX =CC1 %>
 - %GT;

< D​​IV ID =内容> <  - !开始内容股利 - >
    < ASP:标签ID =标签1=服务器文本=标签>< / ASP:标签>
    < BR />
    < ASP:ScriptManager的ID =ScriptManager1=服务器>
    < / ASP:ScriptManager的>
    < BR />
    < ASP:UpdatePanel的ID =upBlog=服务器的UpdateMode =条件>
    <的ContentTemplate>

         < ASP:占位符ID =phBlog=服务器>< / ASP:占位符>
    < /的ContentTemplate>
    <触发器>
 <% - < ASP:AsyncPostBackTrigger事件名称=点击控件ID =btnSave/>  - %GT;
    < /触发器>
    < / ASP:UpdatePanel的>
    < BR />
 < / DIV> <  - !结束含量格 - >

< / ASP:内容>
 

// code

背后

 保护覆盖无效的OnInit(EventArgs的发送)
{
    base.OnInit(E);
    的firstView();
}
保护无效的Page_Load(对象发件人,EventArgs的)
{

}

私人无效的firstView()
{
    的FileStream FS =新的FileStream(使用Server.Mappath(GlobalVar.compathver),FileMode.Open,FileAccess.Read,FileShare.ReadWrite);
    数据集DSET =新的DataSet();
    dset.ReadXml(FS);
    fs.Close();
//其他控件
        按钮btnComments =新按钮();
        btnComments.ID =mybtnComments+ i.ToString();
        btnComments.BorderWidth = 0;
        btnComments.Text = MyFunc.CountComments(行[ID]的ToString(),DSET)+评论;
        phBlog.Controls.Add(btnComments);
        btnComments.CommandArgument =行[ID]的ToString()。
        btnComments.BorderWidth = 0;

        btnComments.Command + =新CommandEventHandler(的button1_Click)

}


私人无效评论查看(字符串ID)///此不火
{
    数据视图myCommentView = GetCommentView(ID);

       按钮btnCommentSave =新按钮();
        btnCommentSave.ID =mySavebtnComments+ i.ToString();
        btnCommentSave.Text =发布;
        btnCommentSave.BackColor = Color.Aquamarine;
        phBlog.Controls.Add(btnCommentSave);
        btnCommentSave.CommandArgument =行[ID]的ToString()。
        btnCommentSave.Click + =新的EventHandler(btnSave_Click);


}




保护无效的button1_Click(对象发件人,CommandEventArgs E)
{
    评论查看(e.CommandArgument.ToString());
}

保护无效btnSave_Click(对象发件人,EventArgs的)
//保护无效btnSave_Click(对象发件人,CommandEventArgs E)
{
    的FileStream fsxml =新的FileStream(使用Server.Mappath(GlobalVar.compathver),FileMode.Truncate,FileAccess.Write,FileShare.ReadWrite);

    //其他code
    // XML文档保存
    xmldoc.Save(fsxml);
 }
 

解决方案

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

我无法明显看出什么毛病code你已经发布但我建议你把一个破发点中的Page_Init作为开始。这将可以告诉你,如果回发实际上发生与否,因为这将被解雇如果按钮确实试图触发按钮单击事件。请记住页面生命周期结束后的任何点击事件被触发(理论上)。

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

I have a UpdatePanel with a PlaceHold contained in it. I create some controls with Labels and Buttons, when Button is clicked it fires an Event that clears PlaceHolder and adds some Textboxes and a Button with an Event. Problem is when this Button is click it appears to do a PostBack and does not fire Event associated with Button. I thought that since these controls are all contained within the UpdatePanel the would be no PostBack, am I missing the flow.

<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>

//Code Behind

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

解决方案

The UpdatePanel still does a postback. The whole page life-cycle is repeated when the button is clicked, and therefore the Page_Init and Page_Load for example will be executed again. AJAX does not remove the postbox, just hides it from the client.

I can't obviously see something wrong with the code you've posted however I would suggest you place a break point in the Page_Init as a start. This will be able to tell you if the postback is actually happening or not, since this will be fired if the button is indeed trying to fire the button click event. Keep in mind any click events is fired after the page life cycle completes (Theoretically).

On second look I would suggest that you change the Button event in the FirstView() method to a Click rather then a Command and see if this triggers the event.

这篇关于那里的UpdatePanel按钮事件不火的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆