'txtName'未声明。由于其保护级别,它可能无法访问

时间:2011-05-30 16:54:05

标签: asp.net

编译后在我的页面上放置一个文本框后,出现上述错误:

'txtName'未声明。由于其保护级别,它可能无法访问。

当我尝试读取代码隐藏页面中文本框的值时会发生这种情况。

我不确定是什么导致了这个......任何想法?

在aspx文件中我有:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="signup.aspx.vb" Inherits="signup" %>

在codebehind aspx.vb文件中,我有:

Imports System.Data.SqlClient
Partial Class signup
    Inherits System.Web.UI.Page

    Protected Sub btnSubmit_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles btnSubmit.Click 

13 个答案:

答案 0 :(得分:23)

好的,我现在解决了这个问题。这是因为我重命名了.aspx文件的副本,并且仍在使用较新版本的代码隐藏文件。

后面的代码文件正在寻找txtName.text但是在旧版本的.aspx文件中,txtName并不存在!

我从项目中排除了旧版本的页面,现在看起来运行正常。

感谢大家的帮助。

答案 1 :(得分:6)

文本框是否直接在页面上?那是什么类型的项目?它是从文件系统打开的Web应用程序或网站吗?如果它是Web应用程序,则设计人员可能无法更新YourPage.aspx.designer.cs文件。检查该文件以确保您具有txtName的定义,如:

protected global::System.Web.UI.WebControls.TextBox txtName;

如果不存在,请删除.design.cs文件,右键单击页面并选择“转换为Web应用程序。这将正确重新创建.design.cs文件。

答案 2 :(得分:4)

可能是文本框声明中缺少的:

runat="server"

答案 3 :(得分:2)

我对完全相同的错误有不同的原因,它类似于OP发现但不完全相同。 My page.aspx.designer.vb不同步并出错。我的一个控件被定义了两次(我想是因为我在粘贴之前复制/粘贴了一个现有的控件而没有编辑ID)。一旦我删除了我可以构建的第二个声明,错误就消失了。有趣的是,VS 2010 SP1没有列出该错误以及由于缺少该页面构建而导致的其他错误。希望这有助于其他人。

答案 4 :(得分:1)

类的排序​​方式是页面生成的类继承自代码隐藏类 - 它们不是局部的,而不是相反的方式。这意味着您的代码隐藏类不了解您在页面上放置的控件。如果要访问在页面本身声明的属性,则需要首先在codebehind类中声明它:

protected TextBox txtName;

然后,您可以在代码隐藏文件中访问此成员。这将正确连接以匹配页面中的控件。

答案 5 :(得分:1)

我之前遇到过这个问题。不知道是什么造成的。但是通过删除有问题的文本框并再次添加它,它就修复了它。

答案 6 :(得分:1)

当后面的代码中的类没有指定Public时,我发现了这个错误。试试这个:

Partial Public Class signup   <-------------Make sure the Public keyword is there
    Inherits System.Web.UI.Page
    ...
End Class

答案 7 :(得分:1)

这就是我的情况。

- 我已在代码

后面声明了变量
Protected Friend sMessage As String = ""

- 然后是aspx:&lt;%= sMessage%&gt;

出现这种情况(visual studio 2015 - asp webform project)

然后我尝试:

-clean solution

-rebuild

然后问题就消失了

  

如果清洁解决方案和重建不起作用

try to clean the obj directory
  

如果变量是asp组件

确保aspx文件中的 runat =&#34;服务器&#34;

答案 8 :(得分:0)

当我将我的asp.net网站从3.5更改为4.0时,我遇到了同样的问题。

为了解决这个问题,我逐页重新创建了整个网站,确保所有页面都具有相同的名称。 我复制了每个页面的页面内容,从3.5网站到4.0网站省略了以<%@开头的顶行。

我在3.5到4.0网站的每个页面的代码中复制了页面类中的所有代码。

答案 9 :(得分:0)

我遇到了这个问题,通过从div中删除runat =“server”属性,即使我没有访问服务器端的div。问题在于,在客户端我尝试访问div的ClientID,如$('#&lt;%= divMultipleDaysOptions.ClientID%&gt;')。

答案 10 :(得分:0)

我得到了类似的错误,但情况有所不同。场景:我已将现有页面添加到我的解决方案的文件夹中,因此我必须更改html文件的页面标记中的某些属性(继承)的值。当我在继承属性中更改了文件夹结构时,我犯了一个错误,导致了这个错误。当文件夹结构不同时,文件后面的代码将无法访问.aspx文件中的控件。所以朋友们,当你遇到这种错误时,请看看Inherits属性值(即文件夹结构是否正确)。

答案 11 :(得分:0)

另一种可能的情况是,Page.aspx.vb文件中的类名与Page.aspx.designer.vb文件中的类名不同。这些必须相同。

答案 12 :(得分:0)

在将控件添加到最初用VS 2008 .Net 3.5到VS 2010 .Net 4的Web sete中添加控件后,我遇到了类似的问题。添加控件之后,我得到了同样的错误。当我查看页面的.designer.vb文件时,添加的控件不在那里。只需将控件添加到文件底部即可解决问题:     受保护的事件lblApprove As Global.System.Web.UI.WebControls.Label