我试过在视图组件的视图中添加一个section脚本.
@section scripts { <script src="~/somepath" asp-append-version="true"></script> }
我在共享布局中也有渲染部分
@RenderSection("scripts",required: false)
在部分视图和项目中的其他位置使用时,脚本加载正常.但是,在View Component中,脚本不会加载.
我想我可以将脚本包含在调用组件的每个视图的section标签中.我觉得这不适合视图组件的自包含特性.
还有其他方法可以做到这一点吗?
解决方法
我在viewcomponents中也遇到了section标签的问题.事实证明,据我所知,在viewcomponents中没有它的支持.见
https://github.com/aspnet/Home/issues/2037
Jake Shakesworth实现了一个标签助手,如下所示:
Javascript in a View Component
另一方面,您可以将它作为一个包含在viewcomponent中
<script defer src"..."> </script>
我的要求是从viewcomponent显示谷歌地图.问题是脚本是在jquery,jquery.ui之前调用的.
通过使用延迟,您告诉解析器在文档加载之前不执行它,从而避免了必须将其放入布局中以便正确执行的问题.
延迟由chrome,safari支持,即(10),ff(3.6),o(15)
希望这可以帮助
这是我的代码示例:
@using MobileVet.WebApp.Services; @inject ISettingsService SettingsService @{ var Options = SettingsService.Value(); <!--Service Area--> <div class="container-fluid"> <div class="row p-3"> <!--First column--> <div class="col-md-3"> <h5 class="title">Site Navigation</h5> <ul> <li><a href="#!">Home</a></li> <li><a href="#!">Services</a></li> <li><a href="#!">Link 3</a></li> <li><a href="#!">Link 4</a></li> </ul> </div> <!--/.First column--> <hr class="w-100 clearfix d-md-none"> <!--Second column--> <div class="col-md-9"> <div id="map-canvas" style="min-height: 300px; min-width: 200px;"> </div> </div> <!--/.Second column--> </div> </div> <!--Service Area--> <script src="http://maps.google.com/maps/api/js?key=XXXXXXXXXXXXXXXXXXXXXXX&sensor=false"></script> <script type="text/javascript" src="~/js/components/servicearea.js" defer ></script> }
请注意,如果视图组件在页面上出现多次,您可能需要编写一些逻辑来防止脚本被多次包含,这不是我的情况