从代码隐藏的ascx.cs文件访问ascx控件

时间:2010-09-08 22:53:02

标签: asp.net-2.0 code-behind ascx

这个应该很简单。我正在创建一个非MVC ASP.NET 2.0站点。 VS2008似乎生成了一个<script>区域的控件 - 我希望代码隐藏在代码中,所以我手动将它连接起来。

我有以下内容:

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的错误。

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

3 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

要了解这里发生了什么,重要的是要注意标记文件(.ascx)继承并且可以访问代码隐藏文件(.ascx.cs)的非私有字段。反之亦然:您无法从代码隐藏中引用标记文件中仅定义 的对象。在您的示例中,这也可以通过将以下内容放在您的widget.ascx.cs文件中来解决:

protected Label Label1;

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