Есть ли простой способ удалить префикс "ct100" из пользовательского элемента управления .NET? - PullRequest
4 голосов
/ 18 августа 2011

Короче говоря, десятки страниц не используют мастер-страницы.Для нового модуля я создал главную страницу с элементом управления меню (элемент управления меню уже существует), чтобы я мог получить тот же самый вид на шести или около того страницах, которые я сейчас создаю.Поскольку страница содержимого использует главную страницу, имя элемента управления Menu было изменено на ct100_Menu1 вместо просто Menu1.Не будет проблемой, если только кто-то не решит использовать точное имя элемента управления для CSS, который стилизует меню, по его точному идентификатору (например, CSS равен Menu1 a { /* stuff */ }).Таким образом, меню не будет правильно отображаться , потому что Я использую мастер-страницу, а не просто копирую код.

Я не могу изменить код CSS в файле меню, поскольку он может что-то сломатьТаким образом, есть ли способ, которым я могу изменить элемент управления, чтобы не отображать это надоедливое ct100 без добавления каких-либо инструментов или путаницы с созданием моего собственного пользовательского элемента управления (так как я не могу заменить элемент управления Menu.ascx, хотя я мог быбыть в состоянии изменить его, чтобы добавить классы CSS), или я могу выбрать, чтобы не использовать главную страницу или скопировать CSS меню в другой файл и установить его правильно?

Чувствуете себя застрявшим между камнем итрудное место, потому что код был специально написан, чтобы вы не могли использовать мастер-страницы, и никто никогда не возвращался, чтобы изменить его.

Ответы [ 6 ]

7 голосов
/ 18 августа 2011

Вы должны установить ClientIdMode в Static. Вот дополнительная информация от MSDN .Примечание. Это только .NET 4.0.

В более ранних версиях я бы порекомендовал стайлинг классов, поскольку вы не можете реально контролировать, какое имя будет везде, где вы его используете (как вы узнали).

3 голосов
/ 18 августа 2011

Если вы находитесь на ASP.net 4.0, вы можете установить свойство ClientID элементов управления.

В противном случае вы можете навредить себе, как в случае: Пользовательский элемент управления, Литералы ASP.net или JavaScript для изменения идентификаторов.

1 голос
/ 18 августа 2011

Просто добавьте новое имя в CSS - без удаления старого (так как вы сказали, что это проблема):

 ctl100_Menu1 a, 
 Menu1 a { /* stuff */ }
0 голосов
/ 06 февраля 2014

Чтобы "исправить" это поведение для всего вашего веб-приложения, найдите в вашем файле web.config следующий тег:

<system.web>
    ...
    <pages ... clientIDMode="*something*">
    </pages>
    ...
</system.web>

Удалите спецификацию свойства clientIDMode="*something*".Просто возьми это.

Yay.

0 голосов
/ 18 августа 2011

Если вы используете ASP.NET 4.0, вы можете переопределить режим визуализации ClientId, либо для каждого элемента управления, либо для всех элементов управления. Например:

<my:Menu runat="server" Id="Menu1" ClientIDMode="Static" />

Это обеспечит сохранение значения "Menu1" в качестве идентификатора на стороне клиента для отображаемого элемента. ( см. Здесь ).

Однако я бы порекомендовал применить класс CSS к элементу меню, а затем настроить правила CSS вокруг класса. Например,:.

#Menu1 a {

... до:

#Menu1 a,
div.menu a {

... и т. Д.

0 голосов
/ 18 августа 2011

Вы используете .NET 4? Если это так, вы можете установить это на свой контроль:

 <asp:SomeControl ClientIDMode="Static" />
...