在开发和生产环境中获取基本URL

时间:2011-12-09 13:17:56

标签: javascript jquery

我正在使用MVC3并使用jquery构建一个标记(链接)。问题是我只能让我的链接在prod或dev中工作,而不是两者。这是我网站的制作网址。

http://tvap.mydomain.com

这是我的开发网址。 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

2 个答案:

答案 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);