C# Can';无法从用户控件访问母版页

C# Can';无法从用户控件访问母版页,c#,asp.net,user-controls,master-pages,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; }

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

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

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

        ...
    }
}
((Recipes.MasterPage)this.Page.Master).UpdateUserLogin();
我想从用户控件调用
UpdateUserLogin()
方法,如下所示:

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

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

        ...
    }
}
((Recipes.MasterPage)this.Page.Master).UpdateUserLogin();
但由于某些原因,编译器不知道
配方.母版页
(是否缺少程序集bla)。
抱歉,我无法显示确切的错误消息,它是法语的

可能问题是我手动添加了
主页
周围的
配方
名称空间,它不是由VS添加的。 顺便说一下,我正在使用VSWebDeveloperExpress 2008


你知道我怎样才能让这个调用工作吗?

母版页和用户控件都是它们所使用的页面的子控件。用户控件可能用于不使用母版页的页面,因此调用
UpdateUserLogin()
将无效

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

if (Page.Master is MasterPage)
{
    ((MasterPage)Page.Master).UpdateUserLogin();
}
更新
看来你已经知道了,对不起。你的问题是关于参考不起作用。用户控件的名称空间是什么?

母版页和用户控件都是它们所使用的页面的子控件。用户控件可能用于不使用母版页的页面,因此调用
UpdateUserLogin()
将无效

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

if (Page.Master is MasterPage)
{
    ((MasterPage)Page.Master).UpdateUserLogin();
}
更新
看来你已经知道了,对不起。你的问题是关于参考不起作用。UserControl的名称空间是什么?

我建议将昵称LBL数据绑定到CurrentUser.昵称属性。如果属性更改,昵称LBL文本将自动更新

我建议将昵称LBL数据绑定到CurrentUser.昵称属性。如果属性更改,昵称LBL文本将自动更新

  • 在内容页ASPX文件的顶部包含MasterType指令:

    ''

  • 在母版页中包含公共方法

    public void UpdateUserLogin(字符串值) { 昵称lbl.Text=值; }

  • 使用主语法从内容页访问该方法:

    Master.UpdateUserLogin(一些文本)

  • 在内容页ASPX文件的顶部包含MasterType指令:

    ''

  • 在母版页中包含公共方法

    public void UpdateUserLogin(字符串值) { 昵称lbl.Text=值; }

  • 使用主语法从内容页访问该方法:

    Master.UpdateUserLogin(一些文本)


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

    第一次评论后更新:


    .ascx.cs和.aspx.cs停留在VS放置它们的位置。但是,如果您想引用类等,则需要将其放置在App_代码中,例如您的Recipes.MasterPage或Recipes.BasePage对象。

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

    第一次评论后更新:


    .ascx.cs和.aspx.cs停留在VS放置它们的位置。但是,如果要引用类等,则需要将其放置在App_代码中,例如,您的Recipes.MasterPage或Recipes.BasePage对象。

    用户控件也位于Recipes命名空间中。我还手动添加了名称空间。用户控件也在
    Recipes
    名称空间中。我还手动添加了名称空间。usercontrol与母版页在同一个项目中吗?usercontrol与母版页在同一个项目中吗?我建议不要使用MasterType virtualpath,请参阅@Bastien它对控件有效,我已经使用了它,它工作得非常好我建议不要使用MasterType virtualpath,请参阅@Bastien。它对控制有效,我已经使用过它,而且它工作得很好。你是说.ascx.cs文件(用户控制代码文件)应该在App_代码中吗?你是说.ascx.cs文件(用户控制代码文件)应该在App_代码中吗?