ASP.NET中使用MasterPage的JQuery
我正在尝试将JQuery与一些使用母版页的asp.net页面一起使用,而且我在加载JQuery javascript文件时遇到了问题。
当我将文件包含在母版页的标记中时,它可以在与母版页位于同一目录的页面上正常工作:
但是对于与母版页不在同一目录中的页面会中断。 母版页inheritance包含它们的页面的路径,因此对于不同的页面,jquery .js文件的相对路径是不同的。 当然,我在主文件中不能有不同的相对路径,因为它们只有一个。
我可以使用绝对路径:
但如果网站安装为虚拟目录,则会中断。
我的下一个尝试是使用“〜”来表示网站的根目录:
但脚本标签不明白〜“。
所以我试着在代码隐藏中做到这一点。 从OnInit(),我试过:
string url = "~/jquery/jquery-1.4.2.min.js"; url = this.ResolveUrl(url); Page.ClientScript.RegisterClientScriptInclude("jquery_js", url);
当JQuery javascript运行时,这给了我错误。 我在页面的标记中有一些javascript:
$(document).ready(function() { ... }
并且我得到“$”未定义。 我在jquery-1.4.2.min.js开头添加了一个警告,并且它正在加载,但是在执行了.aspx文件中的这个javascript之后。
我尝试使用ScriptManager.RegisterClientScriptInclude(),结果相同。
你可以使用:
或者可能构建一个控件,它必须为您重新映射:
或者甚至用ClientScriptManager注册它,但最好将它放在页面中。
使用谷歌服务你的jquery:
注意src属性中缺少http,这将解决http vs https可能出现的任何问题。
原因如下: http : //encosia.com/2008/12/10/3-reasons-why-you-should-let-google-host-jquery-for-you/
Ode To Code在Master Pages上有一篇很棒的文章你也应该看一下:
使用Page.ResolveUrl()
使它相对于Page ,而不是MasterPage (以及它所在的控制目录),如下所示:
string url = Page.ResolveUrl("~/jquery/jquery-1.4.2.min.js");
ResolveUrl是要走的路。
您可以在母版页头中尝试src="<%= Page.ResolveClientUrl("~/jquery.js") %>
。
$
尝试下面这样做
StringBuilder sb = new StringBuilder(); sb.Append(""); Header.Controls.Add(new LiteralControl(sb.toString()));
使用谷歌是一个很好的选择课程但是,你也可以在你遇到问题的每个页面中添加链接(无法找到jquery路径的那些)例如,如果你有一个名为“MyPage.aspx”的页面其他目录只是在页面“MyPage.aspx”的html上添加脚本相对这样thoes页面找不到你的jquery地址将适用于新的一个分别我希望对你有用
不要重复你的自我
为您的网页制作扩展function
public static class yourclass { public static string ConvertRelativePathToRootPath(this Page p, string pathfromroot) { string newUrl = ""; Uri originalUri = HttpContext.Current.Request.Url; newUrl = (originalUri.Scheme) + "://" + originalUri.Authority + pathfromroot; return newUrl; } }
然后只需将以下代码添加到页面加载事件中
string ss = Page.ConvertRelativePathToRootPath("~/script/jquery-1.4.1.min.js"); ScriptManager.RegisterClientScriptInclude(this, this.GetType(), "Jquery", ss);
你还可以使用上面的扩展函数来为你的应用程序主页根目录以外的路径使用像文件或锚标记这样的absolut路径。
该问题的核心是,使用RegisterClientScriptInclude
注入到页面中的JavaScript文件的链接被放置在依赖于它的标记中的JavaScript代码下面的页面上。
$(document).ready()
可能在页面加载之后才会执行,但$()
会立即执行,因为浏览器会读取它。
解决方案是移动JavaScript以便稍后出现在文件中。 当您处理母版页和众多用户控件时,这并不总是如此简单。
对我来说,处理它的最简单方法是使用RegisterStartupScript
从代码隐藏中注入JavaScript。 使用此注入的脚本块将添加到表单的末尾。 其中的可执行语句只有在插入所有各种JavaScript文件后才会执行。