Не могу получить доступ к идентификатору контроля в коде позади
У меня есть следующий код на моей странице 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 и двумя другими файлами. Не забудьте проверить, что имя пространства имен совпадает во всех трех файлах