在外部js文件中,我无法使用
url = "@Url.Action("Action", "Controller")"
//url output : @Url.Action("Action", "Controller")
//I get IllegalPath Name error.
当我写这样的时候:
url = "/Controller/Action"
如果项目位于子文件夹下,则脚本不起作用。我需要这样的东西作为相对的Url:
url = "~/Controller/Action"
怎么能这样做?感谢。
答案 0 :(得分:135)
由于.js文件未被asp.net mvc视图引擎解析,因此您根本无法使用任何c#代码。我建议使用不引人注目的方法,像这样
<div id="loader" data-request-url="@Url.Action("Action", "Controller")"></div>
在javascript中,使用data-request-url
$(function(){
$('#loader').click(function(){
var url = $(this).data('request-url');
alert(url);
});
});
答案 1 :(得分:7)
我不确定这是否是最优雅的解决方案,但我所做的是区分寄存器和外部脚本中的实际实现,以便:
<script>...</script>
... include all the external scripts I need
$(document).ready(function(){
//get all the information you need from your MVC context
//before going out of context and into the scripts
var url = '@Url.Action("Action", "Controller")';
RegisterMyFunction(url, other parameters ..);
RegisterAnotherFunction(url, others...);
}
因此,在我的视图中,我只有寄存器函数,脚本包含特殊值作为参数,以执行我想要的任何操作。
希望它有所帮助,
答案 2 :(得分:2)
这是我一直在使用的模式。这是一个更多的步骤,但我喜欢我的所有网址都在视图中的一个有组织的位置。
在我的视图底部,我将包含一个包含类似URL的脚本部分:
@section Scripts
{
<script type="text/javascript">
myJavaScriptObject.firstUrl = '@Url.Action("Action1", "Controller", new {id = Model.Id})';
myJavaScriptObject.secondUrl = '@Url.Action("Action2", "Controller", new {id = Model.Id})';
</script>
}
在我的JavaScript类(在外部文件中)中,我将像这样引用url:
var myJavaScriptObject = {
firstUrl: '',
secondUrl: '',
docReady: function() {
$.get(myJavaScriptObject.firstUrl, function(data) { do something... });
}
}
我意识到这些条目不需要在课堂内引用,但我喜欢将它们放在那里用于我自己的家务。
答案 3 :(得分:0)
如所描述的公认答案,您不能在外部JS文件中使用任何C#代码。如果需要将几个控制器链接传递到我的外部.js文件中,这通常是我要做的事情。
在C#(.cshtml)
中<script src="~/js/myfile.js"></script>
<script type="text/javascript">
var url1 = "@Url.Action("ActionName", "ControllerName", new { Param = ViewBag.Param })";
var url2 = "@Url.Action("AnotherAction", "AnotherController")";
$(function() {
window.initScript(url1, url2);
});
</script>
在myfile.js中
var _url1;
var _url2;
function initScript(url1, url2) {
_url1 = url1;
_url2 = url2;
// other init. codes...
}
答案 4 :(得分:0)
您可以使用“隐藏”字段执行相同的操作(在“主视图/个人视图”上)。
查看页面:
@Html.Hidden("commonUrlTrack", Url.Action("Action_Method_Name", "Controller_Name"))
<button onclick="commonFunction()">Click Me</button>
JS文件:
function commonFunction() {
var url = $("#commonUrlTrack").val();
alert(url);
}