.netcore 2.1. : Microsoft.AspNetCore.Mvc.Razor.TagHelpers.ITagHelperComponentManager, JavaScript, , body.
, .
, , HTML, & , .
() . , , , .
, . , ( , , ) , ViewComponents.
, JavaScript, shared/_layout.
_layout body. , - javascript, body. JavaScript .
TagHelperComponent TagHelperComponentManager. , ITagHelperComponent , . /Pages/Shared/
ScriptTagHelper
public class ScriptTagHelper : TagHelperComponent
{
private readonly string _javascript;
public ScriptTagHelper(string javascript = "") {
_javascript = javascript;
}
public override Task ProcessAsync(TagHelperContext context, TagHelperOutput output)
{
if (string.Equals(context.TagName, "body", StringComparison.Ordinal))
{
output.PostContent.AppendHtml($"<script type='text/javascript'>{_javascript}</script>");
}
return Task.CompletedTask;
}
}
javascript . ProcessAsync , body JavaScript.
javascript Html-, Html- , . ( , , ).
ViewComponent. , ScriptTagHelper.
. , . , , .
. /Pages/Shared/Components/DataDistribution/Default.cshtml
@model dynamic;
@using Microsoft.AspNetCore.Mvc.Razor.TagHelpers;
@inject ITagHelperComponentManager tagManager;
<div class="col-md-3 grid-margin stretch-card">
<div class="card">
<div class="card-body">
<p class="card-title text-md-center text-xl-left">Data Usage Distribution</p>
<div class="d-flex flex-wrap justify-content-between justify-content-md-center justify-content-xl-between align-items-center">
<h3 class="mb-0 mb-md-2 mb-xl-0 order-md-1 order-xl-0">40016</h3>
<i class="ti-agenda icon-md text-muted mb-0 mb-md-3 mb-xl-0"></i>
</div>
<p class="mb-0 mt-2 text-success">10.00%<span class="text-body ml-1"><small>(30 days)</small></span></p>
</div>
</div>
</div>
@{
Layout = null;
string scriptOptions = Newtonsoft.Json.JsonConvert.SerializeObject(Model);
string script = @"";
script += $"console.log({scriptOptions});";
tagManager.Components.Add(new ScriptTagHelper(javascript: script));
}
ITagHelperComponentManager , . - , javascript , body.
, , . , , , , , jquery, , jquery .
, - . , .netcore 3 , , , 2.1, .