> но есть еще странность, если дать ей айдишник вроде "Visible" или "Controls", то работает, хотя поля с такими именами тоже есть =))
Я пробовал ставить Visible — эффект тот же.
На самом деле есть такое наблюдение: если ты делаешь это в дизайнере (то есть не руками aspx правишь) то дизайнер добавляет в кодбихайнд соответствующее поле и все работает. А ты поле удали и попробуй
The base class includes the field 'Visible', but its type (System.Boolean) is not compatible with the type of control (System.Web.UI.WebControls.Label).
Однако, насчет Controls ты прав: такой ID проходит нормально. Дело за немногим — найти рефлектором кусок кода, котрый это делает, и его изучить Вот ответ на это противоречие:
То есть ищется неприватное поле или не-readonly свойство и дальше сверяются типы и прочее. А свойство Controls — readonly, так что эта штука его не находит (точнее, не рассматривает), ничему не присваивает ссылку на контрол и спокойно добавляет контрол в коллекцию с ID="Controls".
Ну вот, гармония вернулась в мир (с) Масяня
О, до меня похоже дошло что происходит. Парсер анализирует значение свойства id и выясняет, что поле с таким именем ("ID") есть в классе кодбихайнда (id принадлежит базовому классу Control, от которого в том числе наследует и страница; так ищется поле, являющееся ссылкой на контрол в странице). Но оно имеет тип не контрола, а string. Соответственно, парсер не может допустить подобного присваивания и кидает ошибку.
Забавный эффект
Привет, коллеги!
Наткнулся на грабли.
У кого есть идеи хотя бы о причинах такого явления?
На форме:
<asp:Label ID="ID" Runat="server">123</asp:Label>
Ответ парсера:
The base class includes the field 'ID', but its type (System.String) is not
compatible with the type of control (System.Web.UI.WebControls.Label).
Если же указать ID="ID1", то все работает.
Использую .NET Framework 1.1
04.09.05 23:18: Перенесено модератором из '.NET' — AndrewVK
Феномен WebControl.ID
От:
Аноним
Дата:
04.09.05 17:04
Оценка:
Очень просто, у любого контрола есть ID, который храниться в соответствующем свойстве класса. Т.к. в классе формы уже есть свойство ID, попытка создать свойство с таким же именем (что и происходит при добавлении контрола с ID="ID", т.к. контролы — фактически тоже являются свойствами класса формы) не проходит.
Здравствуйте, _SM_, Вы писали: _SM>Ответ парсера:
_SM> The base class includes the field 'ID', but its type (System.String) is not _SM> compatible with the type of control (System.Web.UI.WebControls.Label).
Обычно такое сообщение вылетает, когда не совпадает класс объявленного контрола в форме и код-бехайнде.
Здравствуйте, gaidar, Вы писали:
G>Очень просто, у любого контрола есть ID, который храниться в соответствующем свойстве класса. Т.к. в классе формы уже есть свойство ID, попытка создать свойство с таким же именем (что и происходит при добавлении контрола с ID="ID", т.к. контролы — фактически тоже являются свойствами класса формы) не проходит.
ты не прав. форма тут не причем.
во первых Label не является "формовым" элементом.
во вторых Label может не лежать внутри формы, а быть не посредсвенно на странице.
ты вполне можешь написать
<asp:Label Runat = server ID ="ID"/>
<form id="Form1" method="post" runat="server">
</form>
Здравствуйте, Козьма Прутков, Вы писали:
КП>О, до меня похоже дошло что происходит. Парсер анализирует значение свойства id и выясняет, что поле с таким именем ("ID") есть в классе кодбихайнда (id принадлежит базовому классу Control, от которого в том числе наследует и страница; так ищется поле, являющееся ссылкой на контрол в странице). Но оно имеет тип не контрола, а string. Соответственно, парсер не может допустить подобного присваивания и кидает ошибку. КП>Забавный эффект
но есть еще странность, если дать ей айдишник вроде "Visible" или "Controls", то работает, хотя поля с такими именами тоже есть =))
Здравствуйте, Козьма Прутков, Вы писали:
>> но есть еще странность, если дать ей айдишник вроде "Visible" или "Controls", то работает, хотя поля с такими именами тоже есть =)) КП>Я пробовал ставить Visible — эффект тот же. КП>На самом деле есть такое наблюдение: если ты делаешь это в дизайнере (то есть не руками aspx правишь) то дизайнер добавляет в кодбихайнд соответствующее поле и все работает. А ты поле удали и попробуй
да ты прав, Visible тоже не работает
не знаю в чем был глюк, но не в дизайнере, я им уже года полтора не пользовался вообще.