我想在CoffeeScript中执行类似的操作,以便将所有脚本移到coffe文件中:
$("#btnFinish").click ->
$.post "@Url.Action("Submit", "Process")", (response) ->
$("#PlaceHolderButton")
.button()
.text response
$("#btnHome").click ->
window.location.href='@Url.Action("Index","Home")'
我应该将我需要的url和其他项目推送到隐藏值中,并在脚本运行时查询它们以供日后使用吗?
我觉得我错过了一个关键概念或其他东西。
答案 0 :(得分:3)
尽量避免将javascript与服务器端混合使用。总有更好的解决方法。例如:
@Html.ActionLink("Some button", "Submit", "Process", null, new { id = "btnFinish" })
然后在你的js:
$('#btnFinish').click(function() {
$.post(this.href, function(response) {
...
});
return false;
});
或者如果btnFinish
是某个div,您无法使用帮助程序生成网址,则可以使用HTML5 data- *属性,如下所示:
<div id="btnFinish" data-url="@Url.Action("Submit", "Process")">Some button</div>
然后:
$('#btnFinish').click(function() {
var url = $(this).data(url);
$.post(url, function(response) {
...
});
return false;
});
但是如果你有一些AJAXify的可点击按钮,那么第一种方法在语义上会更好,因为你直接将url作为href的一部分。
同样的事情适用于你的第二个例子:
$('#btnHome').click(function() {
window.location.href = $(this).data('url');
});
因此,您的javascript文件中不再需要任何服务器端标记。您的js是完全静态的,组合的,缩小的,gzip压缩的,缓存的,从内容交付网络提供的服务以及与此相关的所有好处。
答案 1 :(得分:0)
要将Razor直接嵌入到JavaScript中,您需要JavaScript才能通过Razor视图引擎进行评估,然后再将其传递给浏览器。这种情况目前尚未发生,但可以做到。
我用这些方法解决了这个问题:
- 隐藏的现场方法
- 视图中的<script type="text/javascript>...</script>
您可以使用最后一个方法并创建一个配置管理插件,该插件将接收视图中的键值,并提供从视图外部的JavaScript查询它们的方法。
还有Nuz上可用的RazorJS:
http://nuget.org/List/Packages/RazorJS
写Razor-Style C#或VB.NET insde你的Javascript文件。还包含一个http处理程序,用于在需要时提供这些文件。