gpt4 book ai didi

javascript - 打开相对URL以两个 Controller 为前缀

转载 作者:行者123 更新时间:2023-11-28 00:54:56 25 4
gpt4 key购买 nike

我有一个来自 razor (.cshtml) 文件的链接,我在其中通过 onClick 事件调用一些 jQuery:

...onclick="xxxx.forminstance.showFormInstanceNewTab(id);"....

jQuery:

xxxx.forminstance.showFormInstanceNewTab = function (id) {
var url = 'FormInstance/ViewForm/' + id;
window.open(url, '_blank') }

上面应该打开网址https://localhost/xxxx/FormInstance/ViewForm/'id'

但是它在 FormInstance 之前添加了一个额外的 Controller ,因此 URL 最终是:

https://localhost/xxxx/FormPackage/FormInstance/ViewForm/'id'

这会导致错误。为什么要添加 FormPackage?这将在哪里定义/控制?我无法给出绝对 URL,因为主机会在不同情况下发生变化。

最佳答案

您的问题是相对 URL(不是绝对或根相对)将相对于当前页面,因此浏览器会自动将 URL 的该部分添加到任何相对链接的前面。

ASP/MVC/Razor 中的一个常见问题是需要 jQuery 代码中的站点相对 URL。 Web 应用程序可能无法托管在域根目录之外,因此您不能仅使用根相对路径(即以 / 开头)。

有多种技术,但我最喜欢的是将站点根注入(inject)到页面的 body 元素中:

例如在 Razor 语法中

<body data-root="@Url.Content("~/")">

这将转换为:

<body data-root="http://localhost:1234/">

或者(如果您的网站作为应用程序托管):

<body data-root="http://localhost:1234/applicationroot">

因此您可以使用

从 jQuery 中获取它
 var root = $('body').data('root');

然后将该根 URL 附加到任何相对 URL

例如在您的代码中:

var url = root + 'FormInstance/ViewForm/' + id;

我通常在 var root 之后添加一个测试,以确保我的根 URL 始终有一个尾随 /

关于javascript - 打开相对URL以两个 Controller 为前缀,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26336353/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com