我正在使用MVC3并使用jquery构建一个标记(链接)。问题是我只能让我的链接在prod或dev中工作,而不是两者。这是我网站的制作网址。
这是我的开发网址。 http://localhost/TVAP
所以,我有一个链接,我通过jquery创建如下。
var actionCell = $('#itemlist').find(rowId).find(actionCellId);
$('<a>Edit</a>').attr({ 'id': 'edit-' + response.id, 'href': '/Items/Edit/' + response.id }).appendTo(actionCell);
在制作中,这可行,并创建一个链接
<a id="edit-17" href="/Items/Edit/17">
但是在开发(本地)中它不起作用,因为我需要它。
<a id="edit-17" href="/TVAP/ItemManagement/Edit/17">
我从
获得以下内容 $(location).attr('host') ==> localhost
$(location).attr('host') ==> http://localhost/TVAP/Items/Index
信息太少或太多。我知道我可以检查localhost并根据需要添加TVAP,但这似乎是一个黑客。另一个开发人员可能会使用ASP.NET VS开发服务器并获取一个URL将包含localhost但没有我正在获得的TVAP。 即 - http://localhost:64301/Items/Index
答案 0 :(得分:2)
这就是我在_Layout.cshtml中总是做的事情:
<head>
<!-- other stuff -->
<script type="text/javascript">
window.myProjectName = {
baseUrl : '@Url.Content("~/")'
};
</script>
<!-- other scripts -->
</head>
然后,您可以随时使用myProjectName.baseUrl+"Controller/Action"
之类的内容从您自己的javascript文件中访问您的资源。这有助于您将视图与javascript分开,这是一件非常好的事情。
你不想混合使用标记和javascript - 这是一个很长的妥协方案。
答案 1 :(得分:1)
如果你的JS直接在你的视图中(而不是外部JS文件),你可以使用Razor将URL刷新到你的Javascript中。
// untested
var actionCell = $('#itemlist').find(rowId).find(actionCellId);
$('<a>Edit</a>').attr({
'id': 'edit-' + response.id,
'href': '@Url.Action("Edit")/' + response.id
}).appendTo(actionCell);