Não é possível acessar o ID de controle em código atrás
-
19-09-2019 - |
Pergunta
Eu tenho o seguinte código na minha página ASPX:
<asp:Button runat="server" ID="myButton" Text="hello" />
E isso no meu código atrás:
protected void Page_Load(object sender, EventArgs e)
{
myButton.Text = "bye";
}
Por alguma razão
Não pode construir porque não o reconhece!
Minha página é uma página ASPX padrão que usa uma página mestre, o botão está dentro de um controle de conteúdo e tudo está definido para ser executado corretamente, a página é executada e exibe bem, exceto por esse problema de resolução de botões!
Alguma ideia?
Solução
Parece que o seu arquivo de designer (pagename.designer.cs) ficou um pouco confuso. Eu tentaria excluir o botão da sua página e adicioná -lo novamente.
Outras dicas
Se o botão estiver dentro de um recipiente de nomenclatura como um repetidor, você não poderá usá -lo assim. Em vez disso, você precisa fazer algo assim:
Button myButton = (Button)Container.FindControl("myButton");
myButton.Text = "bye";
Eu encontrei o mesmo problema, primeiro eu estava tentando descobrir o que havia de errado com meu arquivo designer.cs. Mas depois que percebi que, para a minha marcação do Webform, estava usando uma cópia/colar do WebForm padrão. Portanto, o problema era que, como o Protector One, disse que verifique a propriedade Indeit da @Page:
<%@ Page Title="Home Page" Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true"
CodeBehind="Default.aspx.cs" Inherits="InputValidation._Default" %>
Encontrei uma solução simples para este caso.
Basta abrir o arquivo designer e adicionar uma linha que corresponda ao seu controle da interface do usuário.
protected global::System.Web.UI.WebControls.Button myButton;
Onde MyButton é Id
do seu controle.
Eu enfrentei o problema e notei que Designer.cs
Os arquivos foram excluídos do meu projeto.
Tente procurá -los inclui seu projeto novamente.
boa sorte
Eu sei que esse problema é resolvido, mas quando tive um problema similar, quando converter WebAplicação de C# para VB - resolvi isso adicionando namespace namespace x / final
Eu tive o mesmo problema hoje e, no meu caso, a solução foi:
- Vamos para:
C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
- Exclua o
Temporary ASP.NET Files
pasta.
Eu encontrei esse problema algumas vezes. Às vezes, os nomes de classificação no designer e o código por trás do não correspondem. Outras vezes, é o espaço para nome que não corresponde. Outras vezes, a página do designer não recebe a variável de membro gerada.
Como o MDresser mencionou, a regeneração do arquivo de designer muito bem pode cuidar do problema. Apenas certifique -se de salvar a página ASPX primeiro.
Certifique -se de não ter arquivos que acidentalmente tentam herdar ou definir a mesma classe (parcial). Esses arquivos podem estar completamente relacionados ao local onde o erro realmente apareceu!
Já faz muito tempo. Buuuut eu estava enfrentando o mesmo problema hoje, então parece que nunca é tarde demais. Para mim, estava acontecendo porque o TextBox
estava dentro de uma forma não nomeada. Então eu defino um ID para o formulário e pude acessar o TextBox
assim: idForm.idTextBox.ToString()
. Eu acho que vai acontecer o mesmo com um button
.
O problema é que você pode ter vários arquivos ASPX com arquivo de código na página da página aponta para o mesmo arquivo CodeBehind. Ele espera que o mesmo controle exista em todo o arquivo ASPX vinculado ao mesmo código por trás e, assim, lançando o erro de compilação.
Verifique o espaço para nome nos três arquivos. Às vezes, há uma discrepância entre o nome do namespace no arquivo designer.cs e os outros dois arquivos. Certifique -se de verificar o nome do nome do nome corresponder nos três arquivos
Basta alterar a propriedade herdada em tag de página
<% Page inherit = "Project_Name.otherform"
mude para
<% Page inherit = "Project_Name.YourForm"
E você verá em form.aspx.desginer.cs O nome da classe também é alterado e corrigido.
Deixe-me explicar: Digamos que você tenha 2 formulários da web test1.aspx e test2.aspx. Você copiou algum código de código de test1.aspx para test2.aspx, seu arquivo test2.aspx usará <% de página como:
<% Page inherit = "Project_Name.test1"
que deveria ser como:
<% Page inherit = "Project_Name.test2"
por causa do seu nome de classe Test2.aspx.designer.cs será alterado automaticamente para o mesmo que test1.aspx.designer.cs, pois é um arquivo gerado pelo sistema e você não poderá usar seus IDs de controle.
Depois de corrigir sua propriedade herdeira, salve e aberto test.aspx.designer.cs para verificar e você verá que o nome da classe também foi alterado. Será como:
public partial class test1
{
...
Mudou para
public partial class test2
{
...
Obrigado mais tarde;)