none
多个UpdatePanel刷新的问题 RRS feed

  • 问题

  • 有三个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);
        }
    
    
      }
    }
    

    2011年3月24日 6:14

答案

  •   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;
          }
        }
      }
    }
    
    2011年3月29日 10:22

全部回复

  • 小弟在线等各位大侠们
    2011年3月24日 9:17
  • 没人啊...
    2011年3月24日 12:46
  • 要判断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);
    }
    }
    2011年3月24日 13:22
    版主
  • 我这是Updatepanel啊...怎么可能用ISpostback了?
    2011年3月25日 3:38
  • UpdatePanel也是通过完整的ASP.NET页面事件的。
    2011年3月25日 4:11
  • 要判断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);
    }
    }
    我加上去之后,第一个Textbox输入后...就什么都不见了..连第一个Textbox都没有了
    2011年3月25日 5:24
  • 你这个方式有几个问题  第一 你所有的事件都是死的  没意义的  第二 你的控件都是动态创建的  第三 你这么多方法没有意义的  只需要一个方法判断request.form里你的动态创建控件的id来控制操作
    2011年3月26日 12:55
  • 你这个方式有几个问题  第一 你所有的事件都是死的  没意义的  第二 你的控件都是动态创建的  第三 你这么多方法没有意义的  只需要一个方法判断request.form里你的动态创建控件的id来控制操作

    你好,我是一个菜鸟,对你的回答说实话我很困惑...

    1.为什么说我的事件都是死的?什么是死的?什么是活?我不懂这个意思.

    2.我如何通过一个方法判断Request.form来控制操作?

    我不太懂,能否给段代码呢?只要能实现三个控件动态生成,第二个是根据第一个控件生成,第三个是根据第二个控件生成就可以了,我需要用到无刷新技术,能否给段代码呢?

    非常感谢!

    2011年3月28日 17:11
  •   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;
          }
        }
      }
    }
    
    2011年3月29日 10:22
  • 我个人认为你的<asp:ScriptManager ID="XML" runat="server"></asp:ScriptManager>应该放在母版页上,不是放在这里,你代码太多,我看的头昏,但是我以前写的时候,都是吧<asp:ScriptManager ID="XML" runat="server"></asp:ScriptManager>放在母版页上的,不是放在这里,你试试
    • 已建议为答案 bozin 2011年3月31日 2:22
    2011年3月31日 2:22