9

我们刚刚将我们的应用程序从 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 呈现服务器控件和客户端 ID 与以前的版本相同。

我们做错了什么?

4

3 回答 3

12

从 ASP.NET 2.0 到 ASP.NET 3.5,ID 的呈现方式发生了变化。由于您要从 2.0 升级到 4.0,您仍然会看到这种差异。更改是由于 XHTML 合规性改进。

您可以尝试使用 xhtmlCompliance 兼容设置切换回 2.0 渲染。还有另一个兼容设置,是的:) 它应该可以工作,但老实说,我不确定旧的兼容设置在 4.0 中的测试效果如何,而且我知道如果你打算使用它不会与 UpdatePanel 兼容那。

您是否有理由要保留 2.0 渲染?只是害怕回归,还是你有任何已知的实际回归?

XHTML 设置:http: //msdn.microsoft.com/en-us/library/ms178159.aspx

于 2010-06-10T05:42:06.240 回答
1

对于这篇文章的未来读者,您可以通过<%=objectid.ClientId %>在 ASP.NET 页面中使用该构造来缓解兼容性问题。

示例:假设您需要在某些客户端 javascript 代码中引用名为 txtInput 的文本框(ASP.NET 将其呈现为 id=ctl00_cphMainContent_txtInput)。您可以在 ASP.NET 页面中使用以下 javascript 代码引用该对象:

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

在运行时,它会自动翻译成以下客户端 javascript:

str txtInputObjNm = "ctl00_cphMainContent_txtInput";

如果 .NET“决定”更改分配 clientid 的方式,您的代码仍然可以工作。

于 2012-03-23T00:17:20.550 回答
1

在 4.0 应用程序pages controlRenderingCompatibilityVersion="3.5" clientIDMode="AutoID"中将完全搞乱Site.master页面中的样式。例如,菜单在设计器中几乎不可见,并且在浏览器中将完全失去其样式。基本上,设计师会失去造型。

I found this by setting the target framework from 4.0 to 3.5 and back to 4.0. After this, the styling was convoluted. After comparing all the files to a good app, I finally found this line in web.config. I removed it, and my styling problems disappeared.

于 2014-07-25T15:04:29.910 回答