【问题标题】:Accessing ascx controls from a codebehind ascx.cs file从代码隐藏 ascx.cs 文件访问 ascx 控件
【发布时间】:2012-12-19 02:03:13
【问题描述】:

这个应该很简单。我正在制作一个非 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 的错误。

感谢您对此事的所有帮助。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 是的,与其他声明相匹配。我已经尝试了其他几种排列,但它们也没有奏效。 :(我也试过codebeside没有运气。
    【解决方案2】:

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

    【讨论】:

      【解决方案3】:

      要了解这里发生的情况,请务必注意标记文件 (.ascx) 继承自代码隐藏文件 (.ascx.cs) 并可以访问其非私有字段。不是相反:您不能从代码隐藏中引用标记文件中定义的对象only。在您的示例中,这也可以通过在您的 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 可能无法访问。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-22
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多