2010-09-08 60 views
0

这个应该很简单。我正在制作一个非MVC ASP.NET 2.0网站。 VS2008似乎生成控制与<script>区域 - 我想在代码隐藏的代码,所以我已经手动挂钩了。从代码隐藏ascx.cs文件访问ascx控件

我有以下几点:

widget.ascx:

<%@ Control Language="C#" ClassName="widget" Codebehind="widget.ascx.cs" Inherits="widget"%> 

<asp:Label ID="Label1" runat="server" Text="Label"></asp:Label> 

widget.ascx.cs:

namespace webapp 
{ 
    public partial class widget : System.Web.UI.Control 
    { 
    protected void Page_Load(object sender) 
    { 
     Label1.Text = Session["user_id"].ToString(); 
    } 
    } 
} 

我复制并粘贴从使用代码隐藏文件的ASPX页面这个东西,但是当我尝试编译时,我得到的错误是Label1 does not exist in this context

对此事的所有帮助表示赞赏。

回答

0

那么,我一定是以错误的方式创建了控件。我开始了一个新的模板,它都按预期工作。如果遇到此问题,只需复制代码并尝试让Visual Studio再次从用户控件模板生成文件。确保你右键点击项目名称并添加一个新文件。

0

是否符合您的其他网页/控件的声明?

尝试使用codebeside而不是codebehind/better来查看其他项目文件中的声明。

+0

是的,它匹配其他声明。我尝试了其他几种排列方式,但他们也没有工作。 :(我也试过codebeside也没有运气。 – jeffcook2150 2010-09-09 02:46:02

0

为了理解这里发生了什么,重要的是要注意标记文件(.ascx)从代码隐藏文件(.ascx.cs)中继承并访问非专用字段。相反:您不能在代码隐藏的标记文件中引用定义为的对象。在你的榜样,这会也已经解决了通过将遵循在widget.ascx.cs文件:

protected Label Label1; 

但是,什么!当您有Visual Studio重新执行该控件时,您可能看不到.ascx.cs文件中的任何此类行。 Visual Studio管理和维护第二个代码隐藏文件,即.ascx.designer.cs文件。 public partial class widget中的partial表示允许在多个文件中定义用于控制的代码。您管理.ascx.cs文件,并且Visual Studio管理.ascx.designer.cs。在标记文件中添加,删除和重命名控件时,Visual Studio 应该在设计器代码隐藏文件中添加,删除和重命名关联的基类字段。如果您删除,编辑或排除此文件,那么Label1可能无法访问。

相关问题