解决方案 »

  1.   

    子页面建立Session在Top.ascx判断session值改变导航信息!
      

  2.   

    Refer this:
    http://www.cnblogs.com/insus/archive/2012/09/25/2700939.html
    http://www.cnblogs.com/insus/p/3207936.html
      

  3.   

    其实LZ的主要问题是aspx页面向母版页.master页面的传值,因为再自定义控件中使用控件的属性能很容易进行传值至于aspx与.master之间的传值,看看这篇文章http://blog.csdn.net/gz2008gz/article/details/4408385
      

  4.   

    想问一下: aspx页面向母版页.master页面的传值,那母版页上的自定义控件 Top.ascx  后台Footer.ascx.cs   如何获得这个值,问题二:我在aspx页上 使用 this.ContentPlaceHolder1.FindControl("textBox1") 这样类似的方法提升找不到 ContentPlaceHolder1 这个控件  一下是代码 Top.ascx  后台 public partial class Top : System.Web.UI.UserControl
        {
                 private string menu_id="0";
            public string Menu_Id
            {
                get { return menu_id; }
                set { menu_id = value; }
            }
           
            protected void Page_Load(object sender, EventArgs e)
            {
                string s = Menu_Id;
                Cms.BLL.Links bll = new Cms.BLL.Links();
                Cms.Model.Links model = new Cms.Model.Links();
                DataSet dt = bll.GetList("IsImage=" + Convert.ToInt32(Menu_Id));
                rptlist1.DataSource = dt.Tables[0].DefaultView;
                rptlist1.DataBind();
            }有自定义控件Top.ascx 的母版页前台代码
    <%@ Master Language="C#" AutoEventWireup="true" CodeBehind="Manager.master.cs" Inherits="Cms.Web.Manager" %><%@ Register src="Controls/Top.ascx" tagname="Top" tagprefix="uc1" %><%@ Register src="Controls/Footer.ascx" tagname="Footer" tagprefix="uc2" %>
        <form id="form1" runat="server">
      
      <!--Logo.Start-->
               <uc1:Top ID="Header" runat="server" />
       <!--Logo.End-->    
                         <asp:ContentPlaceHolder ID="ContentPlaceHolder1" runat="server">
                        内容页
                        </asp:ContentPlaceHolder>
                    <!-- Footer.Start -->
              <uc2:Footer ID="Footer" runat="server" />
                <!-- Footer.Start -->
           
        </form>继承了母版页的子页面前台代码 
    <%@ Page Title="" Language="C#" MasterPageFile="~/Manager.Master" AutoEventWireup="true" CodeBehind="About.aspx.cs" Inherits="Cms.Web.About" %><asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" runat="server"></asp:Content>
    继承了母版页的子页面后台代码       public int menu_id;   //全局变量Id
            public string StrTitle = "";
            public string StrContent = "";
            protected void Page_Load(object sender, EventArgs e)
            {
                if (!IsPostBack)
                {
                    Cms.BLL.Contents bll = new Cms.BLL.Contents();
                    Cms.Model.Contents model = bll.GetModel(1);               // Session["menu_id"] = 1; 
                   // Response.Redirect("Top.ascx");
                     //   Session int id = 1;
               //  FindControl("ContentPlaceHolder1") menu_id.ToString()="1";
                   // this.ContentPlaceHolder1.FindControl("Top").
                    StrTitle = model.Title;
                    StrContent = Cms.Common.Utils.ToTxt(model.Content);
                }问题三,用session 如何向母版页上的自定义控件传值?
     
      

  5.   

    母板页在运行是嵌入内容页的一个用户控件,这其实就跟一个普通的控件的作用是一样的,是用来“屏蔽”内部实现信息的。也就是说,如果你修改母板页的设计(但是Content接口不变),那么你的各种内容页就自动改变了。母板页既然要想维系这种真正的设计目的,就不能去悲催地支持什么外界想当然地去处理其内部的什么子控件这类做法。它一定是是在接口上设计你的“传递一个值”的属性。举个例子,假设我们把这个业务接口预先设计为public interface I传递组织架构的值
    {
        Unit unit{get;set;}
    }
    任何一个控件如果需要外界传递给它组织架构(好在其内部利用这个数据,例如产生顶层菜单),都可以使用这个接口。例如你的母板页可能就是public partial class MyMasterPage : System.Web.UI.MasterPage, I传递组织架构的值
    {
        public Unit unit
        {
            get
            {
                EnsureChildControls();
                .......
            }
            set
            {
                EnsureChildControls();
                .......
            }
        }    .......这样,你的内容页不用等母板页是否做好,就可以按照接口进行编程。例如写        Unit  data = BLL.获取顶层组织架构();
            var master = (I传递组织架构的值)this.Master;
            master.unit = data;这样就是传递这个值(是一个自定义对象)给母板页。
    母板页与top.ascx的关系也是如此。你的top.ascx的代码可以使用这个接口,然后由上面的setter方法中直接给它复制。原则是——信息对外是只暴露接口的。top.ascx内部是如何实现的,与母板页无关,母板页不能想当然地去处理top.ascx内部的控件。同样,内容页也不能想当然地去整什么 textBox1 控件。
    软件之所以成为工程,是有它的道理的。你把那些垃圾的做法去掉一半,就会顺利地开发下去。反之如果你你没有这些知识,可能很快就陷入到泥沼中,你的代码连自己的懒得维护,更别提原本(内部屏蔽的部分)要快速重构了。
      

  6.   

    至于说什么Session集合来临时保存一下数据,这个就很难说它“算是什么”。尽管有不少自学asp.net出身的人这样写代码,但是要知道这是我们懒得去说的一种“毁三观”的习惯造成的。因为Session是会话范畴的机制,而你现在是在讨论一个Page对象内部的整体与局部之间的关系。这就好比如说你写一个代码public void 方法1()
    {
        var x = ......;
        调用方法2(x);
        .......
    }
    你现在只想设计方法“内部”的参数传递机制,你因为不知道这个参数x如何定义,有人跟你说“你定义一个private static 的全局静态变量来为方法2传递参数,这种“毁三观”的做法在你只会做一点小程序混日子的时候可能觉得“也不错,可以达到效果”。但是它其实理解起来更加诡异,而且很容易就会有严重的问题显现出来。