我有一个剃刀(.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,因为主机会在不同情况下发生变化。
答案 0 :(得分:1)
您的问题是相对网址(不是绝对网页或相对根网址)将相对于当前网页,因此浏览器会自动将该部分网址预先添加到任何相关链接。
ASP / MVC / Razor中的一个常见问题是需要jQuery代码中的站点相对URL。 Web应用程序可能不会在域根目录下托管,因此您不能只使用 root-relative 路径(即以/
开头)。
有几种技术,但我最喜欢的是将网站根目录注入页面的body
元素:
e.g。用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
e.g。在你的代码中:
var url = root + 'FormInstance/ViewForm/' + id;
我通常会在var root
之后添加一个测试,以确保我的根网址始终有一个尾随/