7

我已经看到许多消息来源指出将脚本放在部分视图中是不正确/不好的做法,但这引发了一个巨大的问题......

您应该如何运行与局部视图交互的脚本?我试过使用@section scripts { }或类似的东西,但它不起作用。完全没有。该部分包含的脚本很好,但是当 Partial 加载到完整视图中时它们不会被渲染。

此外,我无法在完整视图上呈现部分视图所需的脚本,因为脚本从Model仅在部分视图上呈现的 中提取值,因为它是实际处理数据的难题。

我希望这听起来不会太复杂......我怎样才能有效、高效和正确地渲染脚本以用于我的局部视图的元素 Model

4

1 回答 1

4

@keyCrumbs 我不会给你一个直接的答案,而是让你分析一下。
为局部视图调用脚本的最大问题之一是代码的复制。

认为您将使用 ajax 来获取部分视图,并且您将继续这样做一段时间。在每次调用中,您都将下载脚本代码,并将其放入 html 中。每次重置 html 中的脚本块时,都会重置函数,重置变量。根据您的 js 代码,这可能是一个大问题。

另一点是响应的大小,你可以说,但是 js 的大小很小,我会说为用户的每次调用乘以这个大小,然后为所有连接的用户乘以。

所以最后,一个解决方案,在这种情况下是:在页面中创建函数并在局部视图中调用函数,如下所示:

您的页面:Page.cshtml

<script type="text/javascript">
    function myPartialView_Load() {
        $("birth").datepicker();
        $("phone").mask("000-0000");
    }
</script>

<!-- Some other code here -->

<div>
    <!-- Or you can call from a ajax or other way... -->
    @Html.Action("MyActionPartialView")
</div>

您的部分视图:MyPartialView.cshtml

<script type="text/javascript">
    $(function () { myPartialView_Load(); });
</script>

<form>
    <input type="text" name="birth" id="birth" />
    <input type="text" name="phone" id="phone" />
</form>

因此,正如您所见,问题不在于将 js 置于局部视图中,而在于您执行此操作的方式。所有良好实践的规则背后都有一个“为什么”,如果您了解“为什么”,您可以确定该规则在多大程度上是帮助而不是负担。并决定是否打破它。

就像有人说的那样,我没有给你一个最终的答案,而是你关心的事情。您可以使用其他方法来解决问题。

于 2013-06-21T19:10:42.953 回答