Изменение поля CssClass элемента управления при инициализации - PullRequest
0 голосов
/ 28 октября 2010

Я работаю над чужим кодом и нашел что-то очень интересное и надеюсь, что кто-то может знать, как это происходит.

В файле разметки я размещаю элемент управления TextBox и DropDownList и назначаю им оба значения CssClass из InputField, которые изменяют цвет фона и другие интересные вещи.

Чтобы избежать каких-либо сомнений, вот мои заявления, скопируйте и вставьте дословно из IDE:

<asp:TextBox runat="server" ID="txtCity" CssClass="InputField" />
<asp:DropDownList runat="server" ID="ddlState" CssClass="InputField" OnInit="ddlState_Init" OnLoad="ddlState_Load" />

Когда я выполняю страницу, я вижу обработанный <input> с правильным именем класса.
Но у <select> есть имя класса dropdown, которое, как оказалось, определено в другом файле .css в проекте, который, конечно, отличается от моего стиля.

Еще раз, дословно из источника представления:

<input name="ctl00$ctl00$BodyContentPlaceHolder$ContentPlaceHolder1$txtCity" type="text" id="ctl00_ctl00_BodyContentPlaceHolder_ContentPlaceHolder1_txtCity" class="InputField" />
<select name="ctl00$ctl00$BodyContentPlaceHolder$ContentPlaceHolder1$ddlState" id="ctl00_ctl00_BodyContentPlaceHolder_ContentPlaceHolder1_ddlState" class="dropdown"></select>

Чтобы узнать, как это происходит, я вступил в каждое из следующих событий:

  • Page_Init
  • Page_Load
  • ddlStates_Init
  • ddlStates_Load

и добавил часы к ddlStates.CssClass.
К моему шоку, я обнаружил, что во всех случаях значение CssClass уже изменено на dropdown.

Что меняет название класса так рано?
Может ли что-то, чего я не знаю, о переопределении таких значений?
Даже если что-то меняет значения , может ли оно сделать это до самого события Init элемента управления?

К вашему сведению : класс страницы не наследуется ни от какого базового класса страницы - просто прямой System.Web.UI.Page.

К вашему сведению : я убедился, что я * смотрю на правильный экземпляр ddlStates, добавив случайный атрибут, и проверил, что он сохраняет эту информацию во всех входных событиях Я сделал.

Спасибо.

1 Ответ

2 голосов
/ 28 октября 2010

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

Здесь - это ссылка с дополнительной информацией о файлах скинов / тем.

Из вышеприведенного источника в разделе Параметры темы:

Если вы задаете свойство Темы страницы, настройки элемента управления в теме и на странице объединяются, чтобы сформировать окончательные параметры элемента управления.Если параметр элемента управления определен как в элементе управления, так и в теме, параметры элемента управления из темы переопределяют любые параметры страницы в элементе управления.Эта стратегия позволяет теме создавать согласованный вид на страницах, даже если элементы управления на страницах уже имеют индивидуальные настройки свойств.Например, он позволяет применить тему к странице, созданной в более ранней версии ASP.NET.

Кроме того, вы можете применить тему как тему таблицы стилей, установив свойство страницы StyleSheetTheme страницы.В этом случае локальные параметры страницы имеют приоритет над параметрами, определенными в теме, если параметр задан в обоих местах.Это модель, используемая каскадными таблицами стилей.Вы можете применить тему в качестве темы таблицы стилей, если хотите иметь возможность устанавливать свойства отдельных элементов управления на странице, в то же время применяя тему для общего вида.

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...