0

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

我有以下内容:

小部件.ascx:

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

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

小部件.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.

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

4

3 回答 3

0

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

于 2010-09-17T01:21:36.290 回答
0

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

protected Label Label1;

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

于 2012-12-18T18:03:13.457 回答
0

这是否与您的其他页面/控件的声明相匹配?

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

于 2010-09-08T23:14:10.827 回答