首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网站开发 > asp.net >

子页面给父页面传值解决方案

2013-04-07 
子页面给父页面传值我做了个主页面其中有个textbox 和hyberlink。hyberlink的连接是个子页面,子页面中有个t

子页面给父页面传值
我做了个主页面其中有个textbox 和hyberlink。hyberlink的连接是个子页面,子页面中有个treeview用来读取数据库中的表内数据。现在想在打开子页面后,在treeview中选择某个节点并获取选择节点的text并返回给父页面 赋值给textbox。
父页面代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;

namespace Model
{
    public partial class Mailbox : System.Web.UI.Page
    {        
        protected void Page_Load(object sender, EventArgs e)
        {
            Label1.Text = Session["location"].ToString();
        }

        protected void Button1_Click(object sender, EventArgs e)
        {
            Label1.Text = Session["location"].ToString();
        }        
    }
}

子页面代码:(treeview的代码是从网上学习的)
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data;
using System.Data.SqlClient;
using BLL;

namespace Model
{
    public partial class WebForm3 : System.Web.UI.Page
    {
        private dataOperate dataoperate; 
        protected void Page_Load(object sender, EventArgs e)
        {
            dataoperate = new dataOperate();
            if (!Page.IsPostBack)
            {
                tree.ShowLines = true;
                tree.ShowExpandCollapse = true;
                TreeNodeCollection tnc = new TreeNodeCollection();
                tnc = tree.Nodes;
                //开始调用tncXunHuan,数据库中fuid=9999为根节点  
                tncXunHuan(tnc,0);  
            }
        }
        //树形菜单  
        public void tncXunHuan(TreeNodeCollection tnc, int ParentNumber)
        {

            try
            {
                DataSet ds = new DataSet();


                string sql = "select ID,ParentNumber,LocationNumber from EP_TblLocation where ParentNumber='" + ParentNumber + "'";
                ds = dataoperate.getDataSet(sql);
                // ----------------end------------数据库获取数据  
                //------------------start-----------根据数据结构向treeView添加节点  
                foreach (DataRow dr in ds.Tables[0].Rows)
                {
                    int ID = Convert.ToInt16(dr["ID"]);
                    int parentNumber = Convert.ToInt16(dr["ParentNumber"]);
                    //int parentNumber = Convert.ToInt16(dr["ParentNumber"]);
                    string LocationNumber = dr["LocationNumber"].ToString();
                    TreeNode tn = new TreeNode();
                    tn.Text = LocationNumber;
                    //tn.NavigateUrl = "javascript:getBoundary('" + LocationNumber + "')";//调用前台js方法  
                    //tn.ImageUrl = "images/file.png";//默认图标为file.png                     
                    tnc.Add(tn);
                    string tncword =Convert.ToString(ds.Tables[0].Rows.IndexOf(dr));
                    int tncInt =ds.Tables[0].Rows.IndexOf(dr);
                    //tncXunHuan(tnc[tncword].ChildNodes, ID);
                    tncXunHuan(tnc[tncInt].ChildNodes, ID); //----------递归调用  
                    // tnc = tnc;  
                }
                //------------------end-----------根据数据结构向treeView添加节点  
                //------------------start---------设置包含子节点的父节点的图标  


                if (ds.Tables[0].Rows.Count > 0)
                {
                    //tnc[0].Parent.ImageUrl = "images/openfoldericon.png";//设置父文件图标  

                }
                else
                {

                    //tnc[0].Parent.ImageUrl = "images/file.png";
                }


            }
            catch (Exception e) { return; }
        }

        protected void tree_SelectedNodeChanged(object sender, EventArgs e)
        {
            Session["location"] = tree.SelectedNode.Text;
            Response.Redirect("Mailbox.aspx");
            
        }        
    }
}


现在的问题是如果这样写运行父页面的时候系统会报错,如果把 Label1.Text = Session["location"].ToString();放在buttonclick事件的话,又不能体现实时性只能在点击button后才能显示这样就没什么意义了。我只想从子页面获取tree节点的text后传给父页面的label。求大神指点迷津。(最好有代码)
[解决办法]
Web开发里实际上是不存在所谓的子页面和父页面,这样说实际上是方便理解页面间的关系。因为Http是无状态的,所有页面都是相互独立的。你这个问题是逻辑没理清楚,在你的“主页面”首次加载的时候,Session并没有赋值操作,因为你是在“子页面”里做的,所以它是一个空引用,对一个空引用调用ToString方法,当然报错。
[解决办法]
引用:
Web开发里实际上是不存在所谓的子页面和父页面,这样说实际上是方便理解页面间的关系。因为Http是无状态的,所有页面都是相互独立的。你这个问题是逻辑没理清楚,在你的“主页面”首次加载的时候,Session并没有赋值操作,因为你是在“子页面”里做的,所以它是一个空引用,对一个空引用调用ToString方法,当然报错。

说的对,两个页面正常情况下是无法互相操作的。除非你的父页面定时检测session的值,然后赋值。以达到子页面选择后父页面有反应的效果。

热点排行