Page.ResolveUrl 在 javascript 中不起作用

Page.ResolveUrl is not working in javascript

本文关键字:不起作用 javascript ResolveUrl Page      更新时间:2023-09-26

在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文件)中使用<% ... %>语法。

<小时 />

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

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

特别是,我们想要一个带有语法<%= ... %>显示表达式,其中:

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

知道了这一点,我们可以通过使用以下ResolveClientUrl()来构建自己的 URL:

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

为此,我们将传入 Web 应用程序根运算符~字符,其中 ASP.NET:

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

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

<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。

<小时 />

延伸阅读:

  • ResolveUrl 和 ResolveClientUrl 有什么区别?
  • 相对网址

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