解决aspx控件回传消失的问题

来源:互联网 发布:淘宝卖家怎么优化宝贝 编辑:程序博客网 时间:2024/05/19 12:25

  说实话,动态加载控件一直是一个让我很头疼很头疼的问题,也看了很多帖子文章,大多数都说在在回传之后的pageload中重新加载一遍控件,这没问题,可是如果我的控件就不是在页面载入的时候就加载的,是在点击一个button之后动态加载的怎么办?加一个viewstate标志,该加载的时候再重新加载,可是如果这个用户控件里面我之前输入的信息就全美了。不废话了,说方法。

  其实实现起来那是相当的简单的,控件动态加载总是需要容器的,用tabel也好,用placeholder也好,实现方法就是把放置用户控件的容器,放在一个div里面,为引起回传的控件添加一个客户端属性,保存这个div的innerHTML,在页面加载的时候,再把这个div的inHTML读取出来就行了,下面是部分代码。

 

前台

    <div id="divexam" style="width: 100px; height: 100px">
        <uc1:test id="exam1" runat="server"></uc1:test>
    </div>

<asp:Button id="Button1" runat="server" Text="交卷" OnClick="Button1_Click">

 

 

后台相关代码

 

 protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
           //为按钮1注册保存函数

            Button1.Attributes.Add("onclick", "saveview()");                      
        }
    }

  protected void Button1_Click(object sender, EventArgs e)
    {
        //do something

        //调用读取函数
        ScriptManager.RegisterClientScriptBlock(UpdatePanel1, UpdatePanel1.GetType(), "", "loadview()", true);       
    }

 

我这用的ajax.net 没用的情况吧调用读取函数改成RegisterStartupScript就行了

 

保存和读取的js代码

 

 var hidhtml;
   //保存状态
  function loadview()
  {
      document.getElementById('divexam').innerHTML=hidhtml;
     

  }
  //读取状态
  function saveview()
  {
      hidhtml=document.getElementById('divexam').innerHTML;

  }