从该MasterPage中包含的WebUserControl引用母版页

时间:2011-09-16 09:20:26

标签: c# .net asp.net

我正在从Web用户控件访问MasterPage公共对象,为此,我必须在WUC中引用MasterPage,因为我将在MasterPage中使用该WUC,所以我必须参考WUC来自MasterPage。 .Net告诉我这是一个循环引用,不允许这样做。

我的问题是:如果我在同一个MasterPage上使用它,我可以从Web用户控件访问MasterPage对象吗?

让我们一步一步:

首先,我有一个MasterPage的命名空间,声明了这个对象:

namespace MyMPNamespace {
public partial class SiteMaster : System.Web.UI.MasterPage
{
    public MyNamespace.Navigator Navi {get; set;}
    public MyNamespace.user User { get; set; }

    protected void Page_Init(object sender, EventArgs e) {
        Navi = new MyNamespace.Navigator();
        User = new MyNamespace.user(true, true);
    }
...
} }

然后我可以从Web用户控件访问它,首先,引用MasterPage:

<%@ Register TagPrefix="mp" TagName="MyMP" Src="~/Site.master" %>

然后,使用我创建的命名空间访问它:

public MyNamespace.Navigator Navigator { get; set; }

protected void Page_Load(object sender, EventArgs e)
{
    Navigator = ((MyMPNamespace.SiteMaster)this.Page.Master).Navi;
}

完成后,它适用于任何.aspx页面。但是现在我想把WUC添加到MasterPage,我发现我不能,因为.Net说有一个循环引用(并且是真的,但不应该是一个问题)。

我知道其他方法,比如动态加载WUC(我没试过),或者从MasterPage访问WUC并从那里设置WUC属性(这样可行)。我想知道的是,如果有办法做这个参考因为我喜欢WUC能够访问MasterPage并且100%独立的想法,它知道要显示什么等。根本不需要打电话。

1 个答案:

答案 0 :(得分:0)

我能够创建Web用户控件,将其放在母版页上,然后访问母版页而没有循环引用问题。为了回答,我需要更多信息:

  1. 您使用的是哪个版本的.NET?
  2. 您使用的是网站还是网络应用程序?
  3. 是否在与母版页相同的源文件中创建了用户控件?
  4. 如果没有,为什么要使用Site.master注册用户控件作为Src?
  5. 有问题的用户控件是通过设计师放在网页和主人身上吗?