2010-06-09 9 views
8

Мы только что обновили наше приложение от ASP.Net 2.0 до ASP.Net 4.0.Какова правильная настройка ClientIDMode в ASP.Net 4 для получения рендеринга ASP.Net 2.0.

Мы включили в web.config в <system.web> элемента:

<pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" /> 

Я понимаю, что это, как предполагается оказывать указательные такой же, как .Net 2.0/3.5 будет.

Однако ... это не ... вот один пример

Это визуализируется в 2.0:

<input id="grdUserEntity__ctl1_chkSelectAll" type="checkbox" 
    name="grdUserEntity:_ctl1:chkSelectAll" onclick="javascript:iSelectAll();" /> 

Это в 4.0:

<input id="grdUserEntity_ctl01_chkSelectAll" type="checkbox" 
    name="grdUserEntity$ctl01$chkSelectAll" onclick="javascript:iSelectAll();" /> 

Разница:

2.0 id=grdUserEntity__ctl1_chkSelectAll 
4.0 id=grdUserEntity_ctl01_chkSelectAll 

Согласно на то, что я прочитал, этот параметр конфигурации заставит ASP.Net 4.0 визуализировать серверные элементы управления и идентификаторы клиента идентично предыдущей версии.

Что мы делаем неправильно?

ответ

12

Было внесено изменение того, как идентификаторы были отображены с ASP.NET 2.0 на ASP.NET 3.5. Поскольку вы переходите от 2.0 до 4.0, вы все еще видите эту разницу. Это изменение было связано с улучшением соответствия XHTML.

Вы можете попробовать вернуться к рендерингу 2.0 с настройкой сопоставления xhtmlCompliance. Еще одна настройка совместимости, да :) Это должно сработать, но, честно говоря, я не уверен, насколько хорошо протестирован этот старый параметр настройки в 4.0, и я знаю, что он не будет совместим с UpdatePanel, если вы планируете использовать что.

Есть ли причина, по которой вы хотите сохранить рендеринг 2.0? Просто бойтесь регрессий, или у вас есть какие-либо известные регрессии?

установка XHTML: http://msdn.microsoft.com/en-us/library/ms178159.aspx

+2

У нас есть javascript, основанный на способе распространения 2.0. Итак, да, у нас есть несколько проблем с регрессией. – PilotBob

+0

Да ... это регрессирует. Спасибо, много. – PilotBob

+0

Отлично! Приятно слышать. – InfinitiesLoop

1

Для будущих читателей этого поста, вы можете уменьшить проблемы совместимости с помощью <%=objectid.ClientId %> конструкта на странице ASP.NET.

Пример: предположим, что текстовый ящик, называемый txtInput (который ASP.NET отображает как id = ctl00_cphMainContent_txtInput), который вам нужно указать в некотором клиентском javascript-коде. Вы можете ссылаться на этот объект с помощью следующего яваскрипта кода в ASP.NET страницы:

str txtInputObjNm = "<%=txtInput.ClientId %>"; 

Во время выполнения, он будет автоматически переведен на следующей стороне клиента JavaScript:

str txtInputObjNm = "ctl00_cphMainContent_txtInput"; 

Если .NET «решает» изменить способ назначения клиента, ваш код все равно будет работать.

+5

это предполагает, конечно, что вы разместите свой javascript встроенный в веб-форме. Мы предпочитаем использовать ненавязчивый javascript и не делать этого. – PilotBob

1

В приложении 4.0 pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID" будет полностью испортиться стиль на странице Site.master. Например, меню будет почти невидимым в дизайнере и полностью потеряет свой стиль в браузере. В принципе, дизайнер будет потерян в дизайнере.

Я нашел это, установив целевой фрейм от 4,0 до 3,5 и обратно до 4.0. После этого стиль был запутан. После сравнения всех файлов с хорошим приложением я наконец нашел эту строку в web.config. Я удалил его, и мои проблемы с дизайном исчезли.