2010-07-17 97 views
1

我的母版页的代码看起来是这样的:无法从用户控件访问母版页

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.

你知道我如何使这个调用工作吗?

+0

用户控件是否与主页相同的项目中? – 2010-07-17 02:14:56

+0

是的。 (paadding) – 2010-07-17 07:10:20

回答

0

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

你可以检查它像这样,但是,让您的来电条件:

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

UPDATE 你似乎已经意识到这一点,对不起。你的问题是关于参考不起作用。什么是你的UserControl的命名空间?

+0

用户控件也在'Recipes'命名空间中。我还手动添加了名称空间。 – 2010-07-17 02:09:31

0

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

+0

谢谢,我会试试看。 – 2010-07-17 02:10:05

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

    '<%@ virtualpath的MasterType = “〜/ DetailsMaster.master” %>'

  2. 包括公共方法在母版页

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

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

    Master.UpdateUserLogin(某些文本“);

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

+2

它似乎不适用于控件。但是,谢谢。 – 2010-07-17 07:08:56

+0

我建议不要使用MasterType虚拟路径,请参阅http://stackoverflow.com/questions/1998931/how-to-fix-namespace-problem-with-autogenerated-master-property-if-mastertype-is – citronas 2010-07-17 08:54:32

+0

@Bastien它是有效的控制和我已经使用它,它的工作非常好 – 2010-07-17 09:43:20

0

如果你的项目是一个Web站点项目(而不是Web应用程序项目),那么您没有项目命名空间。所有从aspx.cs或master.cs文件引用的代码都需要存储在App_Code目录中,如ASP.Net c ompiler会创建几个程序集而不是1,而且它不可预测哪个程序集将包含哪些aspx代码。第一个评论后

更新:

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

+0

你的意思是.ascx.cs文件(用户控制代码文件)应该在App_Code? – 2010-07-17 17:57:17