1

我有一个.cshtml包含大量内联 JavaScript 的大文件。对我来说,做这样的事情的能力非常有用:

function submitForm() {
    $.ajax({
        url: "@Url.Action("Action", "Controller")",
        type: "post",
        data: $form.serialize()
    });
}

但是随着代码大小的增长,Intellisense 变得非常缓慢,我想将我的 JavaScript 代码提取到单独的.js. 文件。我知道有RazorJS,但我不想在我的项目中使用它。

我应该将这些 Razor 表达式提取到 JavaScript 变量中,将剩余的代码提取到一个单独的文件中,然后从那里引用这些值吗?这方面的最佳做法是什么?

4

2 回答 2

2

您可以使用不显眼的 JS 技术来完成其中的一些操作,例如将操作放在表单上(即使您实际上并未提交表单)。

看法

<!-- Of course, you would probably use Html.BeginForm() here -->
<form action="@Url.Action("Action", "Controller")" id="form1"></form>

脚本文件

function submitForm() {

    // you can abstract this further if you don't like having IDs 
    // hardcoded (I don't). Data attributes can help with this.
    var form = $("#form1");

    $.ajax({
        url: form.attr("action"),
        type: "post",
        data: form.serialize()
    });
}

然而,随着代码大小的增长,Intellisense 变得非常缓慢,我想将我的 JavaScript 代码提取到单独的 .js 中。文件。

data-*您可以通过向相关元素添加属性来执行更广泛的抽象。虽然这很干净,但它也会使您的代码过于复杂。

如果你有数百行 JavaScript,一定要花时间提取它。如果您只有几十行纯“管道”代码,我会尝试找出 Intellisense 速度慢的原因。

于 2013-04-25T02:24:09.603 回答
0

还有另一种技术可以做你想做的事,但我不确定它是否理想。

只需创建一个局部视图 (.cshtml),仅包含一个<script></script>元素,并在其中放置您愿意提取的 js。

然后,您可以像在 JS 中一样保留 Html 帮助器,只需在原始页面中使用 Html.Partial 帮助器,即可使用 JS 代码显示新创建的局部视图。

由于您的文件是一个 cshtml 文件,因此 razor 会解析它,因为它已经在您的当前页面中进行了解析。

于 2013-04-25T08:38:12.693 回答