我们有一个现有的ASP.Net Web应用程序,我们希望将其转换为使用母版页。
在执行此过程的过程中,我发现为HTML元素生成的HTML ID以ContentPlaceHolder的ID为前缀。这是我们设置ContentPlaceHolder的clientidmode = static时可以预期的结果。
现在,由于我们已有许多使用id的现有客户端脚本,因此当我们使用母版页时,此部分会中断,并且遍历所有JavaScript以确保我们使用Control.ClientID调用javascript是一项艰巨的工作,因为其中很多都是硬编码的。

有没有一种方法可以禁用前缀?如果我创建了每个设置其ClientIdMode = static的控件,那么我可以成功做到这一点,但是我还是希望设置一次,以确保所有控件都具有其ClientIdMode = static。那可能吗?还是可以覆盖ContentPlaceHolder的NamingContainer?

该平台是.Net 4.0

(按照下面的答案中所述在web.config中使用ClientIdMode = static解决上述问题后),我遇到了一个问题,即“名称”属性是自动生成的,并且没有设置为引入之前的状态母版页。这给我现有的服务器代码带来了问题,该服务器代码中有许多Request.Form []。知道这里有什么最佳实践可以解决此问题吗?

谢谢
圣战

最佳答案

您可以在页面级使用ClientIDMode:

<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" ClientIDMode="Static" %>

母版页级别:
<%@ Master Language="C#" AutoEventWireup="true" CodeFile="MasterPage.master.cs" Inherits="MasterPage" ClientIDMode="Static" %>

和Web.Config级别(使所有页面都继承此行为):
<system.web>
    <compilation debug="true" targetFramework="4.0"/>
    <pages clientIDMode="Static"></pages>
</system.web>

关于asp.net - 如何禁用/覆盖内容页面的控件ID的命名容器ID的生成,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16114040/

10-11 01:51