Не могу получить доступ к идентификатору контроля в коде позади

У меня есть следующий код на моей странице aspx:

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

и это в моем коде позади:

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

По какой-то причине intellisense выбирает идентификатор "myButton" в коде, но при компиляции он говорит

он не может построить, потому что не распознает его!

Моя страница является страницей aspx по умолчанию, которая использует главную страницу, кнопка находится внутри элемента управления контентом, и все настроено для правильной работы на сервере, страница работает и отображается нормально, за исключением проблемы с разрешением этой кнопки!

Есть идеи?

13 ответов

Решение

Похоже, ваш дизайнерский файл (PageName.designer.cs) немного запутался. Я бы попробовал удалить кнопку со своей страницы и добавить ее снова.

Если кнопка находится внутри контейнера именования, такого как повторитель, вы не сможете использовать его таким образом. Вместо этого вам нужно сделать что-то вроде этого:

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

Я столкнулся с той же проблемой, сначала я пытался выяснить, что не так с моим файлом designer.cs. Но после того, как я понял, что для моей разметки WebForm я использовал копирование / вставку из веб-формы по умолчанию. Таким образом, проблема заключалась в том, что, как сказал Protector, убедитесь, что вы проверили свойство наследования @Page:

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

Я нашел простое решение для этого случая.

Просто откройте файл конструктора и добавьте строку, соответствующую вашему элементу управления пользовательского интерфейса.

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

Где моя кнопка Id вашего контроля.

У меня была та же проблема сегодня, и в моем случае решение было:

  • Идти к: C:\Users\lenovo\AppData\Local\Temp\Temporary ASP.NET Files\
  • Удалить Temporary ASP.NET Files папка.

Я знаю, что проблема решена, но когда у меня была похожая проблема, когда я преобразовал WebAplication из C# в VB - я решил это, добавив Namespace X / End Namespace

Я столкнулся с проблемой, и я заметил, что Designer.cs файлы были исключены из моего проекта.
попробуйте поискать их в вашем проекте еще раз.
удачи

Это было долго. Но сегодня я столкнулся с той же проблемой, поэтому, кажется, никогда не поздно. Для меня это происходило, потому что TextBox был внутри неназванной формы. Затем я установил идентификатор для формы, и я мог TextBox как это: idForm.idTextBox.ToString(), Я полагаю, что то же самое случится с button,

Я сталкивался с этой проблемой несколько раз. Иногда имена классов в конструкторе и коде не совпадают. В других случаях это пространство имен не совпадает. В других случаях страница конструктора не генерирует переменную-член.

Как упомянул mdresser, восстановление файла конструктора очень хорошо может решить проблему. Просто убедитесь, что вы сначала сохраните страницу aspx.

Проблема в том, что у вас может быть несколько файлов aspx с кодовым файлом в директиве страницы, указывающей на один и тот же код. Ожидается, что один и тот же элемент управления существует во всех файлах aspx, связанных с тем же кодом, что приводит к ошибке компиляции.

Просто измените свойство наследования под тегом страницы

    <% Page inherit = "Project_Name.otherform" 

измените это на

    <% Page inherit = "Project_Name.YourForm"

И вы увидите в form2.aspx.desginer.cs имя класса также изменено и исправлено.

Позвольте мне объяснить: скажем, у вас есть 2 веб-формы test1.aspx и test2.aspx. Вы скопировали часть кода из test1.aspx в test2.aspx, ваш файл test2.aspx будет использовать тег <% page как:

    <% Page inherit = "Project_Name.test1"

который должен был быть как:

    <% Page inherit = "Project_Name.test2"

из-за чего ваше имя класса test2.aspx.designer.cs будет автоматически изменено на то же, что и test1.aspx.designer.cs, поскольку это файл, созданный системой, и вы не сможете использовать свои идентификаторы элементов управления.

Исправив свое наследуемое свойство, сохраните и откройте test2.aspx.designer.cs для проверки, и вы увидите, что имя класса также изменилось. это будет как:

    public partial class test1
    {
     ...

Изменено на

    public partial class test2
    {
    ... 

Спасибо мне позже;)

Убедитесь, что у вас нет файлов, которые случайно пытаются унаследовать или определить тот же (частичный) класс. Эти файлы могут быть совершенно не связаны с тем, где на самом деле появилась ошибка!

Проверьте пространство имен во всех трех файлах. Иногда существует несоответствие между именем пространства имен в файле designer.cs и двумя другими файлами. Не забудьте проверить, что имя пространства имен совпадает во всех трех файлах

Другие вопросы по тегам