JavaScript中的URL帮助器

我正在使用jQuery Lightbox作为我的图片库。
按钮图像的URL为“ ../../Content/Lightbox/lightbox-btn-next.gif
如果我的URL是’ localhost/Something1/Somtehing2 ‘,那很好用
如果我使用其他路由,如’ localhost/Something1/Something2/Something3 ‘,则按钮图像的URL不正确。
我可以在.js文件中使用Url.Action()吗?
这就是我调用.js文件的方式:

 <script type="text/javascript" src=""> 

您不能在.js文件中使用Url.Action()。 但是你可以定义全局变量并在你的js文件中使用它。

  

我将以下内容放在我的母版页中,它完成了与@ Url.Content(’〜/ path’)相同的操作:

  

当我的母版页被编译并提供时,这将转换为一个javascript函数,它将我的站点根目录应用到路径中。 效果很好。 path.replace正则表达式只是删除一个前导斜杠,如果有一个斜杠,因为@ Url.Content(“〜/”)有一个终止斜杠。

只需将@Url.Content(@"~/some paths")放入单引号中,例如:

 '@Url.Content(@"~/some paths")' 

我更喜欢从标签’href’或’action’中提取URL,或者其他一些有意义的元素。

 " alt="Click" /> 

在我的javascript中(在jQuery上仔细检查一下,我不确定它是否是确切的语法。):

 var url = $('._click').attr('href'); // To pass these to your plugin as options // see lightbox source for a full list $('a').lightBox({ imageLoading : url }) 

另一个稍微不太优选的选项是在文件顶部添加您的设置:

  

我说“不太喜欢”,因为这种方法混合了标记和代码。

另一种方法(需要大量整理)是从控制器为你提供js文件:

 public ActionResult GetFileContent(string filename) { // important: make sure to control the path for security var path = Server.MapPath("~/Scripts/" + filename); var content = System.IO.File.ReadAllText(path); // Use some kind of template convention content = content.Replace("{{IMAGE_PATH}}", Url.Content(@"~/my/image.png")); var bytes = new UTF8Encoding().GetBytes(content); return new FileContentResult(bytes, "text/javascript"); }