javascript中的MVC“〜”路径
Posted
技术标签:
【中文标题】javascript中的MVC“〜”路径【英文标题】:MVC "~" path in javascript 【发布时间】:2013-04-21 10:32:57 【问题描述】:我使用 javascript 代码调用 MVC Web API。当前路径为:
http://localhost/myApp/Administrator
但当当前路径为时失败:
http://localhost/myApp/Administrator/
我收到错误 The resource cannot be found
。下面是代码:
$.getJSON("api/UserApi",
function (data)
...
);
我不想在代码中使用绝对 URL,例如:
$.getJSON("http://localhost/myApp/api/UserApi",
function (data)
...
);
绝对 URL 可以正常工作,但缺乏灵活性。有没有办法做下面同样的事情?
$.getJSON("~/api/UserApi",
function (data)
...
);
ASP.NET 支持将“~”字符替换为当前应用程序的根路径,例如:
http://localhost/myApp
但是,JavaScript 文件不支持“~”字符。我如何完成同样的事情?
JavaScript 位于一个独立文件中,无法使用像 Url.Content
这样的 ASP.NET 语句。有没有更好的方法?
我找到了以下方法。有没有更好的解决方案?:
1) 将以下代码写入 .cshtml 文件中
<script type="text/javascript">
var currentDomain = '@Url.Content("~")';
</script>
2) 从 .js 文件中读取currentDomain
变量:
$.getJSON(currentDomain + "/api/UserApi",
function (data)
...
);
【问题讨论】:
【参考方案1】:在视图集页面Url中:
<script type="text/javascript">
var PageUrl = '@Url.Action("Index","Home")';
</script>
然后在一个js文件中:
function MyFunc()
var $form = $('form[id="Form"]');
$.ajax(
type: 'GET',
url: PageUrl+"/MyActionName",
data: $form.serialize(),
cache: false,
error: function (xhr, status, error)
,
success: function (result)
//do something
);
【讨论】:
【参考方案2】:如果您尝试获取某个操作的链接,您可以在视图中定义 JavaScript 变量,这些变量将填充 Url.Action
:
<script type="text/javascript">
var userApiPath = '@(Url.Action("userApi", "api"))';
</script>
然后在你的 JS 文件中使用这个变量:
$.getJSON(userApiPath,
function (data)
);
如果您想要应用程序的一般路径,可以执行以下操作:
<script type="text/javascript">
var path = '@(string.Format("0://12",
Request.Url.Scheme,
Request.Url.Host,
(Request.Url.IsDefaultPort) ? "" : string.Format(":0",
Request.Url.Port)))';
</script>
稍后在您的 JS 文件中的某处使用此变量。当然,您不必使用string.Format
来执行此操作,这只是一个示例。
编辑:
您也可以考虑使用RazorJS。
【讨论】:
【参考方案3】:你试过URL helper
吗?它允许您为您的控制器/操作生成一个完全限定的 URL,如下所示:
@Url.Action("Index", "Home", etc...)
参考:MSDN
更新 我注意到您指的是将动态 URL 写入您的 .js 文件。您不应该将 URL 硬编码到您的脚本中,这会使您的代码更难维护。如果您明天更改域并忘记更改其中一个脚本文件中的 URL 怎么办?您应该将 URL 作为参数从您的 .cshtml 页面传递给您的 JS 函数。
【讨论】:
是的,我不想将域名硬编码到 .js 文件中,所以我想找到一种类似于 CSHTML 文件中的 '~' 字符的方法,可以自动替换 '~ ' char 到当前域,在 JS 文件中似乎没有办法做到这一点,所以我想我现在必须从 CSHtml 文件中获取当前域名,然后将其传递给 js 文件。【参考方案4】:@Url.Action
对于 Javascript
@Url.Content
用于 CSS 和 JS 文件添加。
【讨论】:
javascript在一个独立的文件中,不能使用asp.net语句,有更好的方法吗?以上是关于javascript中的MVC“〜”路径的主要内容,如果未能解决你的问题,请参考以下文章
ASP.NET MVC 视图 - 获取 JavaScript 的虚拟路径 [重复]