Какова правильная настройка ClientIDMode в ASP.Net 4 для получения рендеринга ASP.Net 2.0. - PullRequest
8 голосов
/ 09 июня 2010

Мы только что обновили наше приложение с ASP.Net 2.0 до ASP.Net 4.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 отобразит элементы управления сервером и идентификатор клиента идентично предыдущей версии.

Что мы делаем не так?

Ответы [ 3 ]

12 голосов
/ 10 июня 2010

Произошло изменение способа отображения идентификаторов с 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

1 голос
/ 25 июля 2014

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

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

1 голос
/ 23 марта 2012

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

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

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

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

str txtInputObjNm = "ctl00_cphMainContent_txtInput";

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

...