.net - asp是什么




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

ResolveUrl是IMO最优雅的解决方案。 虽然这是一个真正的耻辱CSS的URL通过runat = server而不是脚本解决。

我对ASP.NET MVC相当陌生,并且在脚本方面遇到了一些麻烦......特别是,我想在大多数页面中使用jQuery,所以将它放入主页面是有意义的。 但是,如果我(从我的~/Views/Shared/Site.Master ):

<script src="../../Scripts/jquery-1.2.6.js" type="text/javascript"></script>

那么这实际上就是客户端的问题 - 当然这只有在我们当前的路线碰巧具有适当的层数时才有效。 以~/Scripts/...开头不起作用。 以/Scripts/...开头只会在项目位于网站根目录时才起作用(我不想这么做)。

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

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

这就是我能够实现它的方式,也适用于非平凡的虚拟 - 但它似乎过于复杂:

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

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


在工作中,我们正在从后面的ASP代码中做这样的事情:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
  Const jQuery As String = "jQuery"

  With Me.Page.ClientScript
    If Not .IsClientScriptIncludeRegistered(jQuery) Then
      .RegisterClientScriptInclude(jQuery, VirtualPathUtility.ToAbsolute("~/Includes/jQuery-1.2.6.js"))
    End If
  End With
End Sub

我不知道在ASP.NET MVC中是否可以这样做。


基于其他回复,也许是Html(这在MVC中很常见)的扩展方法,类似于Eduardo的回答:

 <%=Html.Script("~/Scripts/jquery-1.2.6.js")%>

附:

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

我们的应用程序使用虚拟目录进行部署,而且我们在此处提到的其他答案中遇到了一些问题(未正确解析路径)。 一种行之有效的方法,(不是唯一的方式介意你),是使用这个:

<script src="<%=Request.ApplicationPath%>/Web/AppName/JavaScript/jquery-1.4.1.js"></script>

我做了一些OJ提到的,我用这种方法创建了一个GoogleHelper类

public static string ReferenceGoogleAPI()
{
    var appSettings = new AppSettingsReader();
    string apiKey = appSettings.GetValue("GoogleApiKey", typeof(string)).ToString();
    return ReferenceGoogleAPI(apiKey);
}

public static string ReferenceGoogleAPI(string key)
{
    return "<script type=\"text/javascript\" src=\"http://www.google.com/jsapi?key=" + key + "\"></script>";
}

public static string ReferenceGoogleLibrary(string name, string version)
{
    return "<script type=\"text/javascript\">google.load(\"" + name + "\", \"" + version + "\");</script>";
}

现在我添加额外的方法来获取一些ClientLocation数据;)


我有一个AppHelper类和一些添加脚本引用的方法:

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

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

<%= AppHelper.ReferenceScript("jquery-1.2.6.js") %>

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

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

</script>




scripting