Asp.net mvc 如何在Coffeescript文件中使用Razor表达式?

Asp.net mvc 如何在Coffeescript文件中使用Razor表达式?,asp.net-mvc,razor,coffeescript,Asp.net Mvc,Razor,Coffeescript,我想在CoffeeScript中执行类似操作,以便将所有脚本移到coffe文件中: $("#btnFinish").click -> $.post "@Url.Action("Submit", "Process")", (response) -> $("#PlaceHolderButton") .button() .text response $("#btnHome").click -> win

我想在CoffeeScript中执行类似操作,以便将所有脚本移到coffe文件中:

$("#btnFinish").click ->
    $.post "@Url.Action("Submit", "Process")", (response) ->
        $("#PlaceHolderButton")
            .button()
            .text response

$("#btnHome").click -> 
    window.location.href='@Url.Action("Index","Home")'
我是否应该将url和其他需要的项目推送到隐藏值中,然后在脚本运行时查询它们以备将来使用


我觉得这里缺少了一个关键概念或其他东西。

要将Razor直接嵌入到JavaScript中,您需要先对JavaScript进行Razor视图引擎评估,然后再将其交付给浏览器。这目前还没有发生,但可以做到

我用以下方法解决了这个问题: -隐场法
-尽量避免将javascript与服务器端混合使用。总有更好的解决办法。例如:

@Html.ActionLink("Some button", "Submit", "Process", null, new { id = "btnFinish" })
然后在你的js中:

$('#btnFinish').click(function() {
    $.post(this.href, function(response) {
        ...
    });
    return false;
});
或者,如果
btnFinish
是某个无法使用帮助程序生成url的div,则可以使用HTML5数据-*属性,如下所示:

<div id="btnFinish" data-url="@Url.Action("Submit", "Process")">Some button</div>
但是,如果您有一些可单击的按钮,您可以将其AJAXify,那么第一种方法在语义上会更好,因为您直接将url作为href的一部分

同样的情况也适用于第二个示例:

$('#btnHome').click(function() {
    window.location.href = $(this).data('url');
});
因此,在javascript文件中不再需要任何服务器端标记。您的js完全是静态的、组合的、缩小的、压缩的、缓存的、由内容交付网络提供的服务以及与此相关的所有好处

$('#btnHome').click(function() {
    window.location.href = $(this).data('url');
});