62,041
社区成员
发帖
与我相关
我的任务
分享
public void 方法1()
{
var x = ......;
调用方法2(x);
.......
}
你现在只想设计方法“内部”的参数传递机制,你因为不知道这个参数x如何定义,有人跟你说“你定义一个private static 的全局静态变量来为方法2传递参数,这种“毁三观”的做法在你只会做一点小程序混日子的时候可能觉得“也不错,可以达到效果”。但是它其实理解起来更加诡异,而且很容易就会有严重的问题显现出来。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 控件。
软件之所以成为工程,是有它的道理的。你把那些垃圾的做法去掉一半,就会顺利地开发下去。反之如果你你没有这些知识,可能很快就陷入到泥沼中,你的代码连自己的懒得维护,更别提原本(内部屏蔽的部分)要快速重构了。 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 如何向母版页上的自定义控件传值?