在ASP.NET MVC的母版页中使用脚本

Mar*_*ell 69 .net asp.net asp.net-mvc scripting

我是ASP.NET MVC的新手,我在脚本方面遇到了一些麻烦...特别是我想在大多数页面中使用jQuery,所以将它放在母版页中是有意义的.但是,如果我这样做(来自我~/Views/Shared/Site.Master):

<script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

那么这就是客户端的真实情况 - 当然只有在我们当前的路线恰好具有正确数量的水平时才有效.开始~/Scripts/...不起作用.与启动/Scripts/...,如果这个项目是在站点根(我不想承担)只会工作.

我有一种工作方法(我将在下面发布) - 但是:我错过了什么吗?

我宁愿不必涉及脚本管理器,因为这似乎打败了ASP.NET MVC模型的简单性......或者我担心太多了?

这是我可以使它工作的方式,这也适用于非平凡的虚拟 - 但它似乎过于复杂:

<script src="<%=Url.Content("~/Scripts/jquery-1.2.6.js")%>" type="text/javascript"></script>
Run Code Online (Sandbox Code Playgroud)

Edu*_*añó 45

我有一个AppHelper类,其中包含一些添加脚本引用的方法:

public static string ReferenceScript(string scriptFile)
{
    var filePath = VirtualPathUtility.ToAbsolute("~/Scripts/" + scriptFile);
    return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
}
Run Code Online (Sandbox Code Playgroud)

所以在你的母版页中你可以使用:

<%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢这个; 对于通用API,我现在使用HtmlHelper上的扩展方法做了类似的事情,但+1 (6认同)

sup*_*cal 36

我认为最简单的方法是使用以下内容,它在视图中工作.

<script type="text/javascript" src="<%=ResolveUrl("~/Scripts/myscript.js") %>">

</script>
Run Code Online (Sandbox Code Playgroud)

  • 为什么要打扰任何其他方法?这是最简单和最好的. (4认同)

Mar*_*ell 20

基于其他回复,也许是Html上的扩展方法(对于MVC来说很常见),类似于Eduardo的回答:

 <%=Html.Script("~/Scripts/jquery-1.2.6.js")%>
Run Code Online (Sandbox Code Playgroud)

附:

public static string Script(this HtmlHelper html, string path)
{
    var filePath = VirtualPathUtility.ToAbsolute(path);
    return "<script type=\"text/javascript\" src=\"" + filePath + "\"></script>";
}
Run Code Online (Sandbox Code Playgroud)


OJ.*_*OJ. 10

为什么不直接将您的母版页指向Google的js文件托管?那么即使在部署方面(假设您的网站面向网络),您可以滥用可能预先缓存的jquery文件?

  • 假设网络访问谷歌,情况并非总是如此......理想情况下,它只适用于本地网络服务器 (3认同)
  • 完全同意.这纯粹是一个FYI以防万一:) (2认同)