无法访问后面的代码中的控件ID

时间:2009-08-22 19:06:05

标签: c# asp.net user-controls aspx-user-control

我的aspx页面中有以下代码:

 <asp:Button runat="server" ID="myButton" Text="hello" />

这在我的代码背后:

protected void Page_Load(object sender, EventArgs e)
{ 
    myButton.Text = "bye"; 
}

由于某种原因,intellisense在后面的代码中选择了“myButton”id,但是当它编译它时说

  

它无法构建,因为它无法识别它!

我的页面是一个默认的aspx页面,它使用一个母版页,该按钮位于内容控件中,并且所有页面都设置为在服务器上正确运行,页面运行并且显示正常,除了此按钮分辨率问题!

有什么想法吗?

13 个答案:

答案 0 :(得分:29)

听起来你的设计师文件(PageName.designer.cs)有点搞砸了。我尝试删除页面上的按钮并重新添加。

答案 1 :(得分:10)

如果按钮位于像转发器这样的命名容器内,您将无法像这样使用它。相反,你需要做这样的事情:

Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";

答案 2 :(得分:3)

我遇到了同样的问题,首先我试图弄清楚我的designer.cs文件出了什么问题。但在我意识到我的WebForm标记之后,我使用了Default webform中的复制/粘贴。所以问题是,像Protector一样,请确保检查@Page的继承属性:

<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
    CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>

答案 3 :(得分:3)

我为这种情况找到了一个简单的解决方案。

只需打开设计器文件,然后添加与UI控件对应的行。

protected global::System.Web.UI.WebControls.Button myButton;

myButton 是您控件的Id

答案 4 :(得分:2)

我遇到了问题,我注意到Designer.cs个文件被排除在我的项目之外 试着再次寻找他们的项目。
祝你好运

答案 5 :(得分:2)

我知道问题已经解决,但是当我遇到类似的问题时,当我将Web应用程序从c#转换为VB时 - 我通过添加命名空间X /结束命名空间解决了这个问题

答案 6 :(得分:2)

我今天遇到了同样的问题,在我的情况下解决方案是:

  • 转到:C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • 删除Temporary ASP.NET Files文件夹。

答案 7 :(得分:1)

我已经遇到过这个问题了几次。有时它在设计器中的类名和后面的代码不匹配。其他时候它的命名空间不匹配。其他时候,设计器页面不会生成成员变量。

正如mdresser所提到的,很好地重新生成设计器文件可能会解决问题。只需确保首先保存aspx页面。

答案 8 :(得分:1)

确保没有意外尝试继承或定义相同(部分)类的文件。这些文件可能与错误实际出现的位置完全无关!

答案 9 :(得分:1)

已经很久了。 Buuuut今天我遇到了同样的问题,所以似乎从来没有太晚。 对我来说,这是因为TextBox在一个未命名的形式内。然后我为表单设置了一个ID,我可以像TextBox一样访问idForm.idTextBox.ToString()button。我猜它会和 mochaTest: { 158 src: ['app/tests/middleware/**/*.js'], 159 options: { 162 reporter: 'json', 164 captureFile: './app/tests/results/mochaResult.json', 165 //quiet:'true', 166 require: 'server.js' 167 } 168 }, 一样发生。

答案 10 :(得分:1)

问题是你可能有多个aspx文件,其中页面指令中的代码文件指向相同的代码隐藏文件。 它期望在相同代码后面的所有aspx文件中存在相同的控件,从而引发编译错误。

答案 11 :(得分:0)

检查所有三个文件中的命名空间。有时,designer.cs文件中的命名空间名称与其他两个文件之间存在差异。请务必检查所有三个文件中的名称空间名称是否匹配

答案 12 :(得分:0)

只需更改页面标记

下的inherit属性即可
    <% Page inherit = "Project_Name.otherform" 

将其更改为

    <% Page inherit = "Project_Name.YourForm"

您将在form2.aspx.desginer.cs中看到类名也被更改和更正。

让我解释一下: 假设您有2个Web表单test1.aspx和test2.aspx。您将一些代码从test1.aspx复制到test2.aspx,您的test2.aspx文件将使用&lt;%page tag as:

    <% Page inherit = "Project_Name.test1"

应该是:

    <% Page inherit = "Project_Name.test2"

因为test2.aspx.designer.cs类名将自动更改为与test1.aspx.designer.cs相同,因为它是系统生成的文件,您将无法使用您的控件ID。

在更正继承属性后,保存并打开test2.aspx.designer.cs进行验证,您将看到类名也被更改。 它会像:

    public partial class test1
    {
     ...

已更改为

    public partial class test2
    {
    ... 

稍后再次感谢我;)