【问题标题】:What is the correct setting of ClientIDMode in ASP.Net 4 to get ASP.Net 2.0 rendering.ASP.Net 4 中 ClientIDMode 的正确设置是什么以获得 ASP.Net 2.0 渲染。
【发布时间】:2011-03-01 18:48:04
【问题描述】:

我们刚刚将我们的应用程序从 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 与以前的版本相同。

我们做错了什么?

【问题讨论】:

    标签: asp.net asp.net-4.0 clientid


    【解决方案1】:

    从 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

    【讨论】:

    • 我们有基于 2.0 呈现方式的 javascript。所以,是的,我们现在有几个回归问题。
    【解决方案2】:

    对于本文的未来读者,您可以通过在 ASP.NET 页面中使用 &lt;%=objectid.ClientId %&gt; 构造来缓解兼容性问题。

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

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

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

    str txtInputObjNm = "ctl00_cphMainContent_txtInput";
    

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

    【讨论】:

    • 这当然假设您将 javascript 内嵌在 Web 表单中。我们更喜欢使用不显眼的 javascript 而不是这样做。
    【解决方案3】:

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

    我通过将目标框架从 4.0 设置为 3.5 并返回到 4.0 发现了这一点。在此之后,样式令人费解。在将所有文件与一个好的应用程序进行比较后,我终于在web.config 中找到了这一行。我删除了它,我的造型问题就消失了。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-11-06
      • 2014-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-01-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多