这个应该是非常简单的。我正在做一个非ASP.NET的MVC2.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的错误。
感谢所有在这件事上的帮助。
发布于 2010-09-17 09:21:36
好吧,我一定是以错误的方式创建了控件。我用一个新的模板重新开始,一切都像预期的那样工作。如果您遇到此问题,只需复制您的代码,并尝试要求Visual Studio再次从用户控件模板生成文件。确保右键单击项目名称并添加一个新文件。
发布于 2010-09-09 07:14:11
这是否与其他页面/控件的声明相匹配?
尝试使用codebeside而不是codebeside/ better来查看其他项目文件中的声明。
发布于 2012-12-19 02:03:13
要理解这里发生的事情,重要的是要注意标记文件(.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。
https://stackoverflow.com/questions/3672512
复制相似问题