我是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。
仍然似乎没有人替换我的网址
如果我将我的index.js包含在包中,则没有任何变化。 错误在哪里? 谁和何时替换该URL?
谢谢
答案 0 :(得分:0)
您不能在*.js
文件内使用Razor代码,因为它们直接作为静态文件提供,并且不被ASP.NET处理(也*.ts
文件不被处理,因为它们已经被编译为*.js
(在构建时)。
您可以做的是在视图/页面中呈现Razor生成的JavaScript,并让您的TypeScript或JavaScript期望该数据可用。
像这样:
<script type="text/javascript">
var scriptUrls = {
listDocuments: '@Url.Action("List", "Documents")';
};
</script>
interface PageUrls {
readonly listDocuments: string;
};
declare var scriptUrls: PageUrls;
//
$('#table').DataTable({
ajax: scriptUrls.listDocuments
});
$('#table').DataTable({
ajax: scriptUrls.listDocuments
});