【问题标题】:Can't access master page from user control无法从用户控件访问母版页
【发布时间】:2011-03-17 05:37:20
【问题描述】:

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

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)。 抱歉,我无法显示确切的错误消息,它是法语的。

也许问题是我在MasterPage 周围手动添加了Recipes 命名空间,它不是VS 添加的。 顺便说一句,我正在使用 VS Web Developer Express 2008。

你知道我怎样才能让这个电话正常工作吗?

【问题讨论】:

  • 用户控件和母版页在同一个项目吗?

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


【解决方案1】:

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

第一条评论后更新:

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

【讨论】:

  • 你的意思是.ascx.cs文件(用户控制代码文件)应该在App_Code里吗?
【解决方案2】:
  1. 在内容页面 ASPX 文件的顶部包含一个 MasterType 指令:

    ''

  2. 在母版页中包含一个公共方法

    public void UpdateUserLogin(字符串值) { NicknameLbl.Text = 值; }

  3. 使用主语法从内容页面访问方法:

    Master.UpdateUserLogin(Some Text");

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

【讨论】:

【解决方案3】:

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

【讨论】:

    【解决方案4】:

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

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

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

    更新 看来你已经意识到了,抱歉。你的问题是关于参考不起作用。你的 UserControl 的命名空间是什么?

    【讨论】:

    • 用户控件也在Recipes命名空间中。我还手动添加了命名空间。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-12-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多