我看到很多消息来源说将脚本放在部分视图中是不正确/不好的做法,但这提出了一个很大的问题......
您应该如何运行与部分视图交互的脚本?我尝试使用@section scripts { }
或类似的东西,但它不起作用。完全没有。该部分包含的脚本很好,但是当部分加载到完整视图时它们不会被渲染。
此外,我无法在我的完整视图中呈现我的部分视图所需的脚本,因为脚本从Model
中提取值,该值仅在部分视图上呈现,因为它是拼图的一部分这实际上适用于数据。
我希望这听起来不太复杂......我怎样才能有效,高效,正确地渲染脚本,以便与我的Partial View的元素和 Model
一起使用?
答案 0 :(得分: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放在局部视图中,而是在你这样做的时候。所有良好实践规则都有“为什么”落后,如果你理解“为什么”你可以确定规则是多大的帮助而不是负担。决定是否打破它。
就像说的那样,我没有给你一个最终的答案,但你不管怎么说。您可以使用其他方法来解决问题。