[英]JavaScript callback urls in .js codebehind files in ASP.NET MVC
当我们从View页面引用一个.js文件,然后将URL回调到一个JS文件中时,在VS 2008集成Web服务器或IIS7上运行站点时,URL会无法解析。
例如,我们在JS文件中有这段代码
pending.createCallback(pending.webRoot + "../../WidgetZoneV2/MoveWidget/" + sData, pending.widgetAdmin.moveComplete);
当与集成的Web服务器一起运行时(在URL http://localhost:54354/WidgetZoneV2/)
代码可以正常工作,但是在IIS7上却失败,因为IIS7具有类似http://localhost/virtualdir/WidgetZoneV2
,因为它稍后,回调中的URL被转换为http://localhost/WidgetZoneV2
,这当然不存在。
您如何处理这种情况? 据我所知,唯一的选择是在运行时动态创建JS。
我有一个vb.net函数,我正是用于这种情况。 遵循约定,我使用ASP.NET相对站点根字符“〜”,并将此字符的任何实例后跟一个“ /”解析为完整虚拟根,如下所示
Public Shared Function ResolveUrl(ByVal URL As String) As String
If URL.StartsWith("~") Then
Return (HttpContext.Current.Request.ApplicationPath & URL.Substring(1)).Replace("//", "/")
Else
Return URL
End If
End Function
所以你的代码是
ending.createCallback(pending.webRoot + ResolveUrl(“〜/ WidgetZoneV2 / MoveWidget /”)+ sData,pending.widgetAdmin.moveComplete);
我实际上实现了这个字符串扩展方法,但是我在机器上没有该代码,是从
希望这可以帮助
如果您的js文件位于“ / Scripts”文件夹中,则文件名为widget.js。 路径获取使用jQuery的客户端脚本。
var widgetSrc = $("script[src*=/widget.js]:first").attr("src");
var path = widgetSrc.substring(0, widgetSrc.indexOf("/widget.js"));
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.