从javascript调用ASP.NET MVC应用程序的URL

时间:2020-03-15 11:16:39

标签: javascript asp.net asp.net-mvc

我是ASP.NET MVC的新手。在阅读了许多不同的示例之后,我仍然无法完成此操作。

我捆绑了一些JS脚本,但其中一个捆绑了(因为我每页使用了不同的主脚本)

(_Layout.cshtml)

@Scripts.Render("~/bundles/modernizr")
@Scripts.Render("~/bundles/jquery")
@Scripts.Render("~/bundles/datatables")
@RenderSection("scripts", required: false)

在我看来

(index.cshtml)

@section Scripts
{
    <script src="@Url.Content("~/Scripts/index.js")"></script>
}

在javascript代码中,我试图调用应用程序的特定URL

(index.js)

$('#table').DataTable({
    ajax: '@Url.Action("List", "Documents")'
});

当然,在我的应用程序中,使用名称DocumentsController和List方法定义了一个控制器,并返回正确的JSON。

仍然似乎没有人替换我的网址

enter image description here

如果我将我的index.js包含在包中,则没有任何变化。 错误在哪里? 谁和何时替换该URL?

谢谢

1 个答案:

答案 0 :(得分:0)

您不能在*.js文件内使用Razor代码,因为它们直接作为静态文件提供,并且不被ASP.NET处理(也*.ts文件不被处理,因为它们已经被编译为*.js(在构建时)。

您可以做的是在视图/页面中呈现Razor生成的JavaScript,并让您的TypeScript或JavaScript期望该数据可用。

像这样:

Index.cshtml

<script type="text/javascript">
var scriptUrls = {
    listDocuments: '@Url.Action("List", "Documents")';
};
</script>

Index.ts(如果使用TypeScript)

interface PageUrls {
    readonly listDocuments: string;
};

declare var scriptUrls: PageUrls;

//

$('#table').DataTable({
    ajax: scriptUrls.listDocuments
});

Index.js

$('#table').DataTable({
    ajax: scriptUrls.listDocuments
});
相关问题