在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

10-06 04:06