Мы только что обновили наше приложение от 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 представлять управление сервером и клиентский идентификатор тождественно к предыдущей версии.
Что мы делаем неправильно?
В 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