我的母版页代码如下所示:
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。
你知道如何让这个电话有效吗?
答案 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)
在内容页面ASPX文件的顶部包含一个MasterType指令:
'&lt;%@ MasterType virtualpath =“〜/ DetailsMaster.master”%&gt;'
在主页面中包含公共方法
public void UpdateUserLogin(string value) { NicknameLbl.Text = value; }
使用Master语法从Content页面访问该方法:
Master.UpdateUserLogin(Some Text“);
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对象。