セクションのみ(Default.cshtml
は独立して、メインViewResult
とそのLayout
値の実行デフォルトでnull
です。)部分図またはビュー コンポーネントでは動作しませんビューで作業し、それがでます設計。
あなたはpartial view
またはview component's
ビューを宣言Layout
ためrender sections
にそれを使用することができます。ただし、パーシャルおよびビューコンポーネントで定義されたセクションは、レンダリングビューまたはレイアウトに戻って流れません。 部分ビューまたはビューコンポーネントでjQueryまたはその他のライブラリ参照を使用する場合は、Layout
ページのbody
ではなく、ライブラリをhead
にプルすることができます。
例:
ビューコンポーネント:ViewComponentの
public class ContactViewComponent : ViewComponent
{
public IViewComponentResult Invoke()
{
return View();
}
}
場所:
/Views/[CurrentController]/Components/[NameOfComponent]/Default.cshtml
/Views/Shared/Components/[NameOfComponent]/Default.cshtml
Default.cshtml:
@model ViewComponentTest.ViewModels.Contact.ContactViewModel
<form method="post" asp-action="contact" asp-controller="home">
<fieldset>
<legend>Contact</legend>
Email: <input asp-for="Email" /><br />
Name: <input asp-for="Name" /><br />
Message: <textarea asp-for="Message"></textarea><br />
<input type="submit" value="Submit" class="btn btn-default" />
</fieldset>
</form>
_Layout.cshtml:
<!DOCTYPE html>
<html>
<head>
...
@RenderSection("styles", required: false)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js"></script>
</head>
<body>
@RenderBody()
...
//script move to head
@RenderSection("scripts", required: false)
</body>
</html>
ビュー。CSHTML:grahamehornerによって
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
..................
@{Html.RenderPartial("YourPartialView");}
..................
@await Component.InvokeAsync("Contact")
..................
@section Scripts {
<script>
//Do somthing
</script>
}
ビューコンポーネント:(することができますより多くの情報here)スクリプトがViewComponentにレンダリングされません@sectionは、ビューコンポーネント が能力を持っている必要があり
@section内にスクリプトを含めると、 partitalビューとは異なり、多くのビューでコンポーネントが再利用され、 コンポーネントが独自の機能を担当します。