MVC C# Code in Javascript

本文关键字:Javascript in Code MVC | 更新日期: 2023-09-27 18:19:09

在我的视图中的cshtml页面上,我可以很容易地通过以下行获得操作的URL:

<h1>@Url.Action("NewComment", "Case")</h1>

如果我用Javascript写这个:

<script>
    alert('@Url.Action("NewComment", "Case")');
</script>

它在警报中也会正确出现。

然而,我的问题是,在页面的底部,我有几个其他的javascript被引用,像这样:

<script src="~/Scripts/custom/SomeScript.js"></script>

如果我写alert('@Url.Action("NewComment", "Case")');

在那个文件中。它只是在警告框中显示为@Url.Action("NewComment", "Case")

那么为什么在这个文件中不起作用呢?

在同一个文件中,我也有一个点击方法与$。ajax({方法和url是这样引用的:url: '@Url.Action("NewComment","Case")',,这里它又工作得很好。

那它又是怎么起作用的呢?Ajax方法是一个Jquery对象吗?


我遇到的具体问题是我需要引用URL。Action方法在Jquery Datatable的Ajax调用。

var table_comment= $('#comment_table').dataTable({
    "sDom": "<'dt-toolbar'>",
    ajax: {
        url: "/Case/NewComment/", //This works but want to change it to use URL Action
        url: '@Url.Action("NewComment", "Case")', //don't understand why this doesn't work
        type: "POST",
        data: {"id": Case_ID }
    },

MVC C# Code in Javascript

@Url.Action("NewComment", "Case")在*中工作的原因。cshtml,是由ASP在服务器上呈现为HTML。净MVC。至于你的*.js文件,它们不会被ASP转换。. NET MVC,所以你看到的就是你得到的。

具体来说,.cshtml文件是c# Razor模板,由ASP呈现。. NET MVC转换成。html文件。

至于你的。js文件,也许你可以通过在你的。cshtml中定义你的url作为全局变量来解决这个问题,你只需要在你的。js文件中引用它。

<script>
var newCommentUrl = '@Url.Action("NewComment", "Case")';
</script>

你不能在单独的js文件中编写Razor语法,因为毕竟它的Razor语法'@'只有

Razor引擎可以解释(并且只能在。cshtml扩展名Pages中编写)和Razor引擎

将其转换为合适的HTML,这就是为什么

在单独的js文件中,当你写alert("@Url.Action("NewComment", "Case")")时,它会显示为

@Url.Action("NewComment", "Case")

你不能在链接的JavaScript文件中使用razor语法(@Url.Action) - Visual Studio不这样工作。

作为解决方案,在CSHTML文件中用javaScript写出变量,如下所示:

<script type="Text/javascript">
 var dataTableURL = '@Url.Action("NewComment","Case")';
</script>

下面是外部javascript文件

<script src='@Url.Content("~/Scripts/MyJavaScriptFile.cs")' type="text/javascript"></script>

并修改您的javascript变量以使用上述变量:

var table_comment= $('#comment_table').dataTable({
    "sDom": "<'dt-toolbar'>",
    ajax: {
        url:dataTableURL,
        type: "POST",
        data: {"id": Case_ID }
    },

我找到了一个更好的解决方案!

RazorJS:)工作完美。

http://www.nuget.org/packages/RazorJS