这个应该很简单。我正在创建一个非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
的错误。
对此事的所有帮助表示赞赏。
答案 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可能无法访问。