Monday, June 3, 2024
136
rated 0 times [  141] [ 5]  / answers: 1 / hits: 18739  / 7 Years ago, thu, march 30, 2017, 12:00:00

I have tried adding a section script inside a view component's view.



@section scripts {
<script src=~/somepath asp-append-version=true></script>
}


I also have the Render Section in the shared layout



@RenderSection(scripts, required: false)


When used in partial views and elsewhere in the project the script loads fine. However when in a View Component the script does not load.



I suppose I could include the script in the section tag of every view that calls the component. I feel this does not fit with the self contained nature of a view component.



Is there another way I can do this?


More From » asp.net-core

 Answers
13

I also had problems with sections tag in viewcomponents. Turns out, to the best of my knowledge, there is no support for it in viewcomponents. See https://github.com/aspnet/Home/issues/2037



Jake Shakesworth has implemented a tag helper as shown in:
Javascript in a View Component



On the other hand you could just include it in your viewcomponent as an



<script defer src...>
</script>


My requirement was to show a google map from a viewcomponent. Problem was that the script was getting called before the jquery, jquery.ui stuff.

By using defer you are telling the parser not to execute it until the document had loaded thus avoiding the problem of the having to put it in the layout for proper execution.
Defer is supported by chrome, safari, and ie(10+), ff(3.6+), o(15+)



Hope this helps



This is an example of my code:



@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>

}


Note that you would probably need to write some logic to prevent the script to be included multiple times if the view component is present more than once on a page, which was not my case


[#58332] Tuesday, March 28, 2017, 7 Years  [reply] [flag answer]
Only authorized users can answer the question. Please sign in first, or register a free account.
khalilb

Total Points: 173
Total Questions: 110
Total Answers: 105

Location: Honduras
Member since Thu, Mar 23, 2023
1 Year ago
;