Page.ResolveUrl无法在javascript中运行

时间:2012-06-29 14:15:22

标签: javascript jquery asp.net

在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()代码有什么问题?

2 个答案:

答案 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