我遇到了一些问题,我做了一些挖掘,但努力想出一个决定性的答案/修复。
基本上,我有一些 javascript(由第 3 方创建),可以对页面元素做一些 whizzbang 的东西,使它们看起来很漂亮。该代码在单页(即没有母版)上效果很好,但是,当我尝试将效果应用于母版中的内容页面时,它不起作用。
简而言之,我有一个包含主脚本引用的母版页。所有页面都将使用该脚本,但传递给它的参数将因内容页面而异。
母版页脚本引用
<script src="scripts.js" language="javascript" type="text/javascript" />
单页 <script>
MakePretty("elementID");
</script>
如您所见,我需要每个页面中的引用(因此它在主页面中),但我想要“MakePretty”的实际元素将根据内容而变化。内容页面
现在,由于内容页面没有
<head>
元素,我一直使用以下代码将其添加到母版页面 <head>
元素:HtmlGenericControl ctl = new HtmlGenericControl("script");
ctl.Attributes.Add("language", "javascript");
ctl.InnerHtml = @"MakePretty(""elementID"")";
Master.Page.Header.Controls.Add(ctl);
现在,这个 无法工作 。但是,如果我替换为 alert("HI!")
之类的简单内容,则一切正常。所以代码添加好了,它似乎并不总是根据它在做什么而执行..现在,经过一些挖掘,我了解到内容页面的
Load
事件是在母版页之前引发的,这可能会产生影响,但是,我认为页面上的 javascript 已全部加载/运行一次?如果这是一个愚蠢的问题,请原谅我,但我对使用 javascript 仍然比较陌生,尤其是在母版页场景中。
如何让内容页面调用在母版页中引用的 javascript 代码?
感谢您对这些人的任何/所有帮助,您真的会帮助我解决这个工作问题。
笔记:
RegisterStartupScript
等似乎在任何级别都不起作用.. 抱歉,如果有任何不清楚的地方,我真的很累,所以如果需要,请评论是否需要重新措辞/澄清。
最佳答案
将 ContentPlaceHolder 放在母版页的 head 部分,然后在引用占位符的内容页上添加一个 asp:Content 控件,并将您的脚本放在该控件中。您可以通过这种方式为每个页面自定义它。
此外,按 ID 引用可能不起作用,因为当您使用母版页时,页面上的控件 ID 是根据容器结构自动创建的。因此,与预期的“elementID”不同,它可能会输出“ctl00_MainContentPlaceHolder_elementID” 查看您的源代码或使用 Firebug 检查您的表单元素以查看输出的 ID 是什么。
关于c# - ASP.NET 母版页中的元素增强 Javascript,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/176171/