在jQuery代码中,我正在使用ResolveUrl("~/DynamicMenu.ashx")
。
但它只返回确切的字符串:
"ResolveUrl("~/DynamicMenu.ashx")"
以下是一些代码:
pageIndex = pageIndex + 1;
var CountryCode = getCookie("SetCountry");
var urlToHandler = '<%= ResolveUrl("~/DynamicMenu.ashx") %>';
urlToHandler = urlToHandler + CountryCode + "&PageIndex=" + pageIndex;
alert(urlToHandler);
我的 ResolveUrl()代码有什么问题?
答案 0 :(得分:2)
正如 poncha 所指出的那样,问题在于,就ASP.NET而言,.js文件中传递的内容是一个字符串。在IIS提供之前,它不会应用任何类型的呈现。任何其他内容文件都会获得相同的处理方式,例如.jpg
或.png
。
为了调用服务器端方法(如ResolveUrl
),您需要在ASP.NET中解析的任何页面中使用<% ... %>
语法(如.aspx
或.master
文件)。
顺便说一下,这些小代码块有很多不同的名称:
特别是,我们希望Displaying Expression的语法为<%= ... %>
,其中:
将等号后写入的值写入当前页面
了解这一点,我们可以使用ResolveClientUrl()
构建我们自己的网址:
返回适合客户端使用的URL字符串,以访问Web服务器上的资源
为此,我们将传递Web Application Root Operator或~
字符,其中ASP.NET:
将〜运算符解析为当前应用程序的根目录:
通过组合这些,我们可以将显示表达式的结果保存到JavaScript变量中,方法是将以下代码放在主页面上(改编自Joel Varty's blog):
<script type="text/javascript">
var baseUrl = '<%= Page.ResolveClientUrl("~/") %>';
</script>
由于JavaScript变量本质上是全局的,因此任何其他脚本现在都可以访问baseUrl
变量,因此我们可以使用以下脚本从.js文件中使用它:
function ResolveUrl(url) {
return url.replace("~/", baseUrl);
}
现在,您可以直接从您的javascript文件中调用ResolveUrl("~/DynamicMenu.ashx")
,它将通过删除“〜/”并将其替换为服务器端脚本先前创建的baseUrl来创建相应的URL。
进一步阅读:
答案 1 :(得分:1)
尝试此解决方案 - ResolveUrl in Javascript