Asp.net mvc 如何在Coffeescript文件中使用Razor表达式?
我想在CoffeeScript中执行类似操作,以便将所有脚本移到coffe文件中: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
$("#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');
});