2

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

4

2 回答 2

2

正如poncha 所指出的,问题在于就 ASP.NET 而言,您的 .js 文件中传递的内容是一个字符串。在 IIS 交付之前,它不会应用任何类型的呈现。它得到与任何其他内容文件相同的处理,例如 a.jpg.png.

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


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


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

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

知道了这一点,我们可以使用以下方法构建自己的 URL ResolveClientUrl()

返回适合客户端访问 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);
}

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


延伸阅读:

于 2014-01-08T20:16:16.030 回答
1

试试这个解决方案 - ResolveUrl in Javascript

于 2012-06-29T14:26:36.860 回答