无法从用户控件访问母版页

时间:2010-07-17 01:02:18

标签: c# asp.net user-controls master-pages

我的母版页代码如下所示:

namespace Recipes
{
    public partial class MasterPage : System.Web.UI.MasterPage
    {
        ...

        public void UpdateUserLogin()
        {
            NicknameLbl.Text = ((Recipes.BasePage)Page).CurrentUser.Nickname;
        }

        ...
    }
}

我想从用户控件中调用UpdateUserLogin()方法,如下所示:

((Recipes.MasterPage)this.Page.Master).UpdateUserLogin();

但由于某种原因,编译器不知道Recipes.MasterPage(你错过了一个程序集blablabla)。 抱歉,我无法显示确切的错误消息,它是法语。

可能问题是我手动在Recipes周围添加了MasterPage命名空间,而VS没有添加它。 顺便说一句,我正在使用VS Web Developer Express 2008。

你知道如何让这个电话有效吗?

4 个答案:

答案 0 :(得分:0)

MasterPage和UserControl都是他们使用的页面的子控件。您的UserControl可能会在不使用您的MasterPage的页面中使用,因此调用UpdateUserLogin()将无效。

但是,您可以这样检查,并有条件地拨打电话:

if (Page.Master is MasterPage)
{
    ((MasterPage)Page.Master).UpdateUserLogin();
}

<强>更新 看来你已经意识到了这一点,对不起。您的问题是关于参考不起作用。 UserControl的命名空间是什么?

答案 1 :(得分:0)

我建议将NicknameLbl绑定到CurrentUser.Nickname属性。然后,如果属性更改,NicknameLbl文本将自动更新。

答案 2 :(得分:0)

  1. 在内容页面ASPX文件的顶部包含一个MasterType指令:

    '&lt;%@ MasterType virtualpath =“〜/ DetailsMaster.master”%&gt;'

  2. 在主页面中包含公共方法

    public void UpdateUserLogin(string value)         {             NicknameLbl.Text = value;         }

  3. 使用Master语法从Content页面访问该方法:

    Master.UpdateUserLogin(Some Text“);

  4. http://www.codeproject.com/KB/aspnet/Master_and_Contents.aspx

答案 3 :(得分:0)

如果您的项目是网站项目(而不是Web应用程序项目),那么您没有项目名称空间。从aspx.cs或master.cs文件引用的所有代码都需要存储在App_Code目录中,因为ASP.Net编译器将创建多个程序集而不是1,并且不可预测哪个程序集将包含哪个aspx代码。

第一条评论后更新:

.ascx.cs和.aspx.cs留在VS放置的地方。但是你要引用类等,这需要放在App_Code中,例如你的Recipes.MasterPage或Recipes.BasePage对象。