首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Page.ResolveUrl不适用于javascript

Page.ResolveUrl不适用于javascript
EN

Stack Overflow用户
提问于 2012-06-29 14:15:22
回答 2查看 14.4K关注 0票数 2

在jQuery代码中,我使用的是ResolveUrl("~/DynamicMenu.ashx")

但它只返回确切的字符串:

"ResolveUrl("~/DynamicMenu.ashx")"

下面是一些代码:

代码语言:javascript
复制
pageIndex = pageIndex + 1;
var CountryCode = getCookie("SetCountry");
var urlToHandler = '<%= ResolveUrl("~/DynamicMenu.ashx") %>'; 
urlToHandler = urlToHandler + CountryCode + "&PageIndex=" + pageIndex;
alert(urlToHandler);

我为ResolveUrl()编写的代码有什么问题

EN

回答 2

Stack Overflow用户

发布于 2014-01-08 20:16:16

正如蓬查所指出的,问题在于,就ASP.NET而言,.js文件中交付的内容是一个字符串。在IIS交付之前,它不应用任何类型的呈现。它得到与.jpg.png一样的任何其他内容文件的待遇。

为了调用服务器端方法(如ResolveUrl),您需要在由ASP.NET解析的任何页面中使用<% ... %>语法(比如.aspx.master文件)。

顺便说一句,这些小代码块有很多不同的名称:

  • 内联表达式
  • 嵌入式代码块
  • 代码掘金
  • 服务器端脚本分隔符
  • 代码呈现块
  • ASP指令

特别是,我们需要一个语法为http://msdn.microsoft.com/en-us/library/6dwsdcf5.aspx<%= ... %>,其中:

在将等号写入当前页后输入的值。

知道了这一点,我们就可以使用ResolveClientUrl()构建自己的URL,如下所示:

返回适合客户端用于访问Web服务器上资源的URL字符串

为此,我们将传入Web应用根操作符~字符,其中ASP.NET:

将~运算符解析为当前应用程序的根:

通过组合它们,我们可以将显示表达式的结果保存到JavaScript变量中,方法是在母版页上放置以下代码(改编自Joel Varty的博客):

代码语言:javascript
复制
<script type="text/javascript">
    var baseUrl = '<%= Page.ResolveClientUrl("~/") %>';
</script>

由于JavaScript变量本质上是全局的,所以任何其他脚本现在都可以访问baseUrl变量,因此我们可以使用下面的脚本从.js文件中使用它:

代码语言:javascript
复制
function ResolveUrl(url) {
    return url.replace("~/", baseUrl);
}

现在您可以从您的javascript文件直接调用ResolveUrl("~/DynamicMenu.ashx"),它将通过去掉"~/“并替换为服务器端脚本先前创建的baseUrl来创建适当的URL。

二读:

票数 2
EN

Stack Overflow用户

发布于 2012-06-29 14:26:36

试试这个解决方案- Javascript中的ResolveUrl

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11263425

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档