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"); }