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_代码中吗?