无法在后面的代码中访问控制ID
-
19-09-2019 - |
题
我在ASPX页面中有以下代码:
<asp:Button runat="server" ID="myButton" Text="hello" />
这在我的代码背后:
protected void Page_Load(object sender, EventArgs e)
{
myButton.Text = "bye";
}
由于某种原因,Intellisense在背后的代码中选择了“ mybutton” ID
它无法构建,因为它无法识别它!
我的页面是一个默认的ASPX页面,该页面使用主页,该按钮在内容控件内部,所有设置都设置为正确运行在服务器上,该页面运行并显示正常,除了此按钮分辨率问题!
有任何想法吗?
解决方案
听起来像您的Designer文件(pagename.designer.cs)有点混乱。我将尝试从您的页面上删除按钮并再次添加。
其他提示
如果按钮像中继器一样在命名容器中,您将无法这样使用。相反,您需要做这样的事情:
Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
我遇到了同样的问题,首先我试图弄清我的Designer.cs文件出了什么问题。但是,在我意识到我的WebForm标记后,我使用了默认WebForm的复制/粘贴。因此,问题是,就像Protector One所说的那样,请确保您检查@page的继承属性:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
我为这种情况找到了一个简单的解决方案。
只需打开Designer文件并添加与您的UI控件相对应的行。
protected global::System.Web.UI.WebControls.Button myButton;
在哪里 mybutton 是 Id
您的控制。
我面对这个问题,我注意到 Designer.cs
文件被排除在我的项目之外。
尝试再次将它们包含在您的项目中。
祝你好运
我知道解决了问题,但是当我遇到一个类似问题时,当我将WebAplication从C#转换为VB时 - 我通过添加命名空间X / End Namespace解决了此问题
今天我有同样的问题,就我而言,解决方案是:
- 去:
C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
- 删除
Temporary ASP.NET Files
文件夹。
我已经遇到了几次这个问题。有时,它在设计师中的名称和背后的代码不匹配。其他时候,这是名称空间不匹配的。其他时候,设计人员页面不会生成成员变量。
正如Mdresser提到的那样,对设计器文件的再生可能会解决这个问题。只需确保首先保存ASPX页面即可。
确保您没有意外尝试继承或定义相同(部分)类的文件。这些文件可能与错误实际出现的位置完全无关!
已经很久了。 buuuut我今天面临着同样的问题,所以看来还为时已晚。对我来说,这是由于 TextBox
在不命名的形式内。然后我为表格设置一个ID,我可以选择 TextBox
像这样: idForm.idTextBox.ToString()
. 。我想它会发生同样的事情 button
.
问题是,您可能在页面指令中具有多个带有代码文件的ASPX文件到同一CodeBehind文件。它期望在链接到同一代码后面的所有ASPX文件中存在相同的控件,从而丢弃了汇编错误。
检查所有三个文件中的名称空间. 。有时,Designer.cs文件中的名称名称与其他两个文件之间存在差异。确保检查所有三个文件中的名称空间名称匹配
只需更改页面标签下的继承属性
<% 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文件将使用<%页面标签为:
<% 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
{
...
稍后谢谢我;)