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 的虚拟路径 [重复]

JavaScript中的MVC,模型中的拍摄变化如何

文本框鼠标移出MVC中的Javascript

参考视图文件夹中的 JavaScript 文件 - MVC 5

我想更改 ASP.NET Core 5 MVC 中的路径

如何从 javascript 文件中获取函数的值到 ASP.NET MVC 视图?