积极答复者
多个UpdatePanel刷新的问题

问题
-
有三个UpdatePanel,Update0,Update1,Update2.
Update1的控件通过Update0的Textbox控件动态生成(如果Update0里的Textbox0的值发生改变,就在Update1里生成一个Textbox1的控件)
Update2的控件通过Update1的Textbox1控件动态生成(如果Update1里的Textbox1的值发生改变,就在Updata2里生成一个Textbox2的控件)
好了,问题来了,Update1的TextBox1控件顺利生成出来了,但是当改变TextBox1的值时,Update1清空了,Textbox1也没有了,Update2的控件也没生成出来了,这是咋回事呢?
<%@ Page Title="" Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="true" CodeBehind="test1.aspx.cs" Inherits="Pranser.test1" %> <asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"> </asp:Content> <asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"> <form id="form1" method="post"> <asp:ScriptManager ID="XML" runat="server"></asp:ScriptManager> <asp:UpdatePanel ID="Update0" runat="server" ><ContentTemplate> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="Update1" runat="server" > <ContentTemplate> </ContentTemplate> </asp:UpdatePanel> <asp:UpdatePanel ID="Update2" runat="server"><ContentTemplate></ContentTemplate></asp:UpdatePanel> <br /> </form> </asp:Content>
using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.UI; using System.Web.UI.WebControls; namespace Pranser { public partial class test1 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TextBox tb1 = new TextBox(); tb1.ID = "dff"; tb1.AutoPostBack = true; tb1.TextChanged+=new EventHandler(tb1_TextChanged); Update0.ContentTemplateContainer.Controls.Add(tb1); } protected void tb1_TextChanged(object sender, EventArgs e) { TextBox wk = new TextBox(); wk.ID = "ddd"; wk.AutoPostBack = true; wk.TextChanged += new EventHandler(wk_TextChanged); Update1.ContentTemplateContainer.Controls.Add(wk); } void wk_TextChanged(object sender, EventArgs e) { TextBox dd = new TextBox(); dd.ID = "dfdf"; Update2.ContentTemplateContainer.Controls.Add(dd); } } }
答案
-
public partial class WebForm3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TextBox tb1 = new TextBox(); tb1.ID = "dff"; tb1.AutoPostBack = true; Update0.ContentTemplateContainer.Controls.Add(tb1); if (IsPostBack) { if (Request.Form["dff"] != null) { createTextBox("dff", Request.Form["dff"]); tb1.Text = Request.Form["dff"]; } if (Request.Form["ddd"] != null) { createTextBox("ddd",Request.Form["ddd"]); } } } private void createTextBox(string key ,string value) { switch (key) { case "dff": TextBox wk = new TextBox(); wk.ID = "ddd"; wk.Text = value; wk.AutoPostBack = true; Update1.ContentTemplateContainer.Controls.Add(wk); break; case "ddd": TextBox dd = new TextBox(); dd.ID = "dfdf"; dd.Text = value; Update2.ContentTemplateContainer.Controls.Add(dd); break; } } } }
- 已标记为答案 Song TianModerator 2011年3月30日 7:45
全部回复
-
-
要判断Ispostback
protected void Page_Load(object sender, EventArgs e)
{
if(!this.IsPostBack){
TextBox tb1 = new TextBox();
tb1.ID = "dff";
tb1.AutoPostBack = true;
tb1.TextChanged+=new EventHandler(tb1_TextChanged);
Update0.ContentTemplateContainer.Controls.Add(tb1);
}
} -
你这个方式有几个问题 第一 你所有的事件都是死的 没意义的 第二 你的控件都是动态创建的 第三 你这么多方法没有意义的 只需要一个方法判断request.form里你的动态创建控件的id来控制操作
你好,我是一个菜鸟,对你的回答说实话我很困惑...
1.为什么说我的事件都是死的?什么是死的?什么是活?我不懂这个意思.
2.我如何通过一个方法判断Request.form来控制操作?
我不太懂,能否给段代码呢?只要能实现三个控件动态生成,第二个是根据第一个控件生成,第三个是根据第二个控件生成就可以了,我需要用到无刷新技术,能否给段代码呢?
非常感谢!
-
public partial class WebForm3 : System.Web.UI.Page { protected void Page_Load(object sender, EventArgs e) { TextBox tb1 = new TextBox(); tb1.ID = "dff"; tb1.AutoPostBack = true; Update0.ContentTemplateContainer.Controls.Add(tb1); if (IsPostBack) { if (Request.Form["dff"] != null) { createTextBox("dff", Request.Form["dff"]); tb1.Text = Request.Form["dff"]; } if (Request.Form["ddd"] != null) { createTextBox("ddd",Request.Form["ddd"]); } } } private void createTextBox(string key ,string value) { switch (key) { case "dff": TextBox wk = new TextBox(); wk.ID = "ddd"; wk.Text = value; wk.AutoPostBack = true; Update1.ContentTemplateContainer.Controls.Add(wk); break; case "ddd": TextBox dd = new TextBox(); dd.ID = "dfdf"; dd.Text = value; Update2.ContentTemplateContainer.Controls.Add(dd); break; } } } }
- 已标记为答案 Song TianModerator 2011年3月30日 7:45