【问题标题】:Control not found in the code behind of an aspx page在 aspx 页面后面的代码中找不到控件
【发布时间】:2014-05-01 16:28:04
【问题描述】:

我在 InfoEdition.aspx 中有这段代码:

<%@ Page Title="" Language="C#" MasterPageFile="~/Espace_Candidat/SousCandidat.master" AutoEventWireup="true" CodeFile="InfoEdition.aspx.cs" Inherits="Espace_Candidat_InfoEdition" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ChildContent2" Runat="Server">
<div class="span9">
<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox>  
 </div>
</asp:Content>

当我尝试访问文本框时,在 InfoEdition.aspx.cs 后面的代码中:

public partial class Espace_Candidat_InfoEdition : System.Web.UI.Page
{

    protected void Page_Load(object sender, EventArgs e)
    {
// THE TEXTBOX IS NOT FOUND
      TextBox1.
    }
}

找不到文本框!!!

  • 出现此错误的原因是什么?
  • 我该如何解决?

【问题讨论】:

  • 尝试重建解决方案。这是一个网站还是一个网络应用程序?
  • 您是否尝试在浏览器中查看此内容,而不是依赖 Visual Studio intellisense - 它有时无法更新
  • 这是一个网络应用程序
  • 请给我们代码隐藏页面的完整代码...

标签: c# asp.net .net master-pages code-behind


【解决方案1】:

我认为您应该使用var txt1 = Content1.FindControl("TextBox1"),然后如果txt1 不为空,请像通常使用TextBox1 一样使用它?

var txt1 = Content1.FindControl("TextBox1");
txt1.Text = "some value";

【讨论】:

  • 这很好用,但是通过“Textbox1”访问它也应该有效。我会仔细注意其他错误,因为您稍后可能会因为导致此问题的任何原因而在其他地方运行。
  • 当它是一个子控件时,你不能只访问它,你必须通过父控件集合访问它,就像我上面显示的那样。或者至少当我向Content, Repeater,DataView/DataGrid/GridView 控件添加控件时,我总是不得不这样做。
  • 这看起来不像一个子控件。它直接放在页面上。应该在后面的代码中为它创建了一个强类型字段。
【解决方案2】:

在声明中将 CodeFile 更改为 Codebehind

更新 检查 InfoEdition.aspx 页面的“构建操作”属性设置为?它应该设置为“内容”。

【讨论】:

  • 可以访问 Content1 控件吗?
  • 另外,什么命名空间(如果有)将代码包装在代码隐藏中?您可能需要将其添加到“继承”属性中,例如“Mynamespace.Espace_Candidat_InfoEdition”。
  • 不存在命名空间,我无法访问 content1
【解决方案3】:

我的回答有点晚了,但您可以做的一件事是检查设计器文件是否存在于您的 ASPX 页面所在的文件夹中。

如果缺少设计器文件,代码隐藏将无法找到您的字段。

为了重新创建设计器字段,您需要使用 VS2019 项目 --> 转换为 Web 应用程序菜单选项

【讨论】:

    猜你喜欢
    • 2011-07-02
    • 1970-01-01
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 2014-08-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多