【问题标题】:ClientID getting changed when deploying asp.net 2.0 website to Framework 4.0将 asp.net 2.0 网站部署到 Framework 4.0 时 ClientID 发生变化
【发布时间】:2010-10-13 09:06:26
【问题描述】:

我有一个托管在 GoDaddy 上的网站,他们有 4.0 版运行时。 问题是服务器控件的客户端 ID 生成为“contentPlaceHolder1_drpBanks”,而之前(当网站位于其他服务器上时)生成为“ctl00_contentPlaceHolder1_drpBanks”。

我需要知道的是有办法解决这个问题,这样我就不必对代码进行任何更改。

像 web.config 文件中的设置或其他东西。

【问题讨论】:

  • 您学到了宝贵的一课,不要依赖自动生成的名称。有更好的方法来解决这个问题。

标签: asp.net clientid


【解决方案1】:

以后使用<%=Control.ClientID%>,每次都会成功解决 - 无需更改代码。

【讨论】:

    【解决方案2】:

    ASP.NET 4.0 中的控件具有ClientIDMode 属性。如果将此设置为AutoID,则 ASP.NET 应该以与 ASP.NET 2.0 中相同的方式生成客户端 ID。这是一个 article,它解释了不同的客户端 ID 模式。

    除了在控制级别设置ClientIDMode,还可以在页面或应用级别设置:

    <%@ Page Language="C#" ClientIDMode ="AutoID" ... %>
    

    <system.web>
        <pages clientIDMode="AutoID" />
    </system.web>
    

    但我同意 leppie 的评论,即依赖生成的客户端 ID 很危险。

    【讨论】:

    • 当然,下次我会注意的。非常感谢
    • 未来读者:请注意,ClientIDMode msdn.microsoft.com/en-us/library/…article msdn.microsoft.com/en-us/library/… 不包含相同的信息。
    • 有没有办法在ASP.NET2.0中实现这个功能?我的意思是 2.0 中的 ClientIDCode="Static" 功能。(对于 Web 应用程序中的预定义 ID,这不应该更改,否则会影响其他地方。
    • 恐怕这是不可能的。 ASP.NET 2.0 中只有一种 id 生成算法。这在当时不是问题,因为当时没有很多客户端代码。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-08-06
    • 2012-06-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-27
    • 1970-01-01
    相关资源
    最近更新 更多