我将现有应用程序移植到 DotNetNuke 模块并发现了奇怪的行为。我在创建 javascript 时使用 ClientID,以便代码可以识别 HTML 元素。通常这会创造一个像这样的价值:
"g_ctl00_ctl01_ctl00_ctl00_txtSearch"
我们都看过一百万次了,对吧?好吧,在将此代码移植到 DotNetNuke 模块并首次运行后,ClientID 属性将返回:
"dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl00_ctl00_txtSearch"
注意逗号和空格。这会导致各种 javascript 错误。例如,ASP.NET 登录控件现在输出无效的 javascript:
var dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired = document.all ? document.all["dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired"] : document.getElementById("dnn_ctr397_GalleryServerPro.Web.Gallery, TechInfoSystems_ctl00_ctl01_ctl01_lv_ctl02_Login1_UserNameRequired");
我的模块的程序集名称为 TechInfoSystems.GalleryServerPro.dll,默认命名空间为 GalleryServerPro.Web,用户控件位于名为 Gallery.cs 的类中,因此这部分解释了一些额外文本的来源,但为什么在那里吗?我该怎么做才能确保 ClientID 不输出逗号、空格或其他可能导致 javascript 出现问题的字符?
谢谢,罗杰