日期:2014-05-17  浏览次数:20399 次

关于弹出层的问题,保持层状态的问题?
在网页中,有一个按钮来控制弹出层的显示,点这个按钮便弹出DIV层,层里有Textbox,dropdownlist和一个Button控件来添加员工信息,当点Button时,数据在传入数据库的同时,主页面刷新,刚传入数据库的信息也在主页面的Gridview控件中显示,好像我要的效果达到了.但问题是我的弹出层也随着主页面的刷新而隐藏起来了.有什么办法即可以刷新主页面,又不让弹出层隐藏起来呢?
这是在CSDN上面搜索到的有关答案:
1、给这个DIV一个唯一的ID,比如layer_01
2、在ASPX页面中声明一个形式如function setLayerState(stateString)的java script函数,当其中包含"layer_01_visible=true"的值的时候,设置layer_01可见。具体写法我不提示了。
3、在ASPX页面中声明一个hidden field,假设叫做layerState,其value初始为空
4、当layer_01可见性发生改变的时候,用java script函数设定layerState的值为"layer_01_visible=true"。如果有多个层需要管理,你可以自己决定怎么存储,比方说增加"layer_01_visible=true;layer_02_visible=false;layer_01_height=100px"等等
5、在ASPX页面的Page_Load代码中,如果IsPostBack为真,则获取layerState这个隐藏字段的值,使用Page.RegisterStartupScript()功能调用setLayerState,参数就是layerState的值

这5个步骤,我真的不会弄,麻烦,哪位知道的朋友,帮我这个新手一把,真的很急,在这个问题上我已经纠结很久了,得不到解决,看到这5步骤感觉能解决我的问题,但自己就是不会写代码.

------解决方案--------------------
下面是一个完整的例子,你创建一个access数据库MengXianHui.mdb,表明Table1,字段分别为id,Title,Content,放到App_Data文件夹下就可以直接测试了

HTML code
<%@ Page Language="C#" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<script runat="server">  
  String ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|MengXianHui.mdb;";
  System.Data.DataTable CreateDataSourceByXianhuiMeng()
  {
    System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(ConnectionString);
    System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("select * from Table1", cn);
    cn.Open();
    System.Data.OleDb.OleDbDataReader dr = cmd.ExecuteReader();
    System.Data.DataTable dt = new System.Data.DataTable();
    dt.Load(dr);
    cn.Close();
    return dt;
  }

  protected void Page_Load(object sender, EventArgs e)
  {
    if (Request.QueryString["id"] != null)
    {
      //插入内容
      String textbox = Request.Form["TextBox1"];
      String select = Request.Form["DropDownList1"];
      System.Data.OleDb.OleDbConnection cn = new System.Data.OleDb.OleDbConnection(ConnectionString);
      System.Data.OleDb.OleDbCommand cmd = new System.Data.OleDb.OleDbCommand("insert into Table1 ([Title],[Content]) Values(@Title,@Content)", cn);
      cn.Open();
      cmd.Parameters.AddWithValue("@Title", textbox);
      cmd.Parameters.AddWithValue("@Content", select);
      cmd.ExecuteNonQuery();
      cn.Dispose();
      Response.ClearContent();
      GridView GridView1 = new GridView();
      GridView1.DataSource = CreateDataSourceByXianhuiMeng();
      GridView1.DataBind();
      System.Text.StringBuilder sb = new System.Text.StringBuilder();
      System.IO.StringWriter sw = new System.IO.StringWriter(sb);
      HtmlTextWriter htw = new HtmlTextWriter(sw);
      GridView1.RenderControl(htw);
      Response.Write("这里查询数据,输出结果就可以了。结果:" + sb.ToString());
      Response.End();
    }
    else
    {
      //测试数据
      DropDownList1.DataSource = new String[] { "A", "B", "C", "D" };
      DropDownList1.DataBind();
    }
  }

  /// 添加这个override void VerifyRenderingInServerForm(Control control),是为了避免出现
  /// 类型“GridView”的控件“GridView1”必须放在具有 runat=server 的窗体标记内。
  /// 的异常
  public override void VerifyRenderingInServerForm(Control control)
  { }
</script>
<html xmlns="http://www.w3.org/1999/xhtml">
<head id="Head1" runat="server">
  <title>使用 AJAX,局部刷新 GridView 进行数据绑定的简单实现</title>
  <script type="text/javascript">
    function GetData() {
      data = "TextBox1=" + encodeURIComponent(document.getElementById('<%=TextBox1.ClientID %>').value) + "&DropDownList1=" + document.getElementById('<%=DropDownList1.Cli