在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()代码有什么问题?
最佳答案
poncha指出,问题在于,就ASP.NET而言,.js文件中提供的内容是字符串。在IIS交付它之前,它不应用任何形式的渲染。它得到与其他任何内容文件相同的处理方式,例如.jpg
或.png
。
为了调用服务器端方法(如ResolveUrl
),需要在ASP.NET解析的任何页面(如<% ... %>
或.aspx
文件)中使用.master
语法。
顺便说一下,这些小代码块有很多不同的名称:
Inline Expressions
Embedded Code Blocks
Code Nuggets
Server Side Script Delimiters
Code Render Blocks
ASP Directives
特别是,我们希望使用语法<%= ... %>
的Displaying Expression,其中:
等号写入当前页面后输入的值
知道这一点,我们可以使用ResolveClientUrl()
构建自己的URL,该URL:
返回适合客户端用于访问Web服务器上资源的URL字符串
为此,我们将传入Web Application Root Operator或~
字符,其中ASP.NET:
将〜运算符解析为当前应用程序的根:
通过将这些结合起来,我们可以通过将以下代码放在母版页上(改编自Joel Varty's blog)来将显示表达式的结果保存到JavaScript变量中:
<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。进一步阅读:
What is the difference between ResolveUrl and ResolveClientUrl?
Relative Urls