1. ホーム
  2. asp.net-mvc

[解決済み】@sectionスクリプトとは何か、何のために使うのか?

2022-02-20 03:25:48

質問事項

マイクロソフトのウェブサイトからチャットのサンプルをダウンロードしました。いくつかのチュートリアルを見てきましたが、@section script{}を見たことがありません。C#コードのこのブロック(@section script{})なしでスクリプトを作成したことがありますが、うまく動作するように見えます。

@section scripts {
<!--Script references. -->
<!--The jQuery library is required and is referenced by default in _Layout.cshtml. -->
<!--Reference the SignalR library. -->
<script src="~/Scripts/jquery.signalR-2.2.0.min.js"></script>
<!--Reference the autogenerated SignalR hub script. -->
<script src="~/signalr/hubs"></script>
<!--SignalR script to update the chat page and send messages.-->
<script>
    $(function () {
        // Reference the auto-generated proxy for the hub.
        var chat = $.connection.chatHub;
        // Create a function that the hub can call back to display messages.
        chat.client.addNewMessageToPage = function (name, message) {
            // Add the message to the page.
            $('#discussion').append('<li><strong>' + htmlEncode(name)
                + '</strong>: ' + htmlEncode(message) + '</li>');
        };
        // Get the user name and store it to prepend to messages.
        $('#displayname').val(prompt('Enter your name:', ''));
        // Set initial focus to message input box.
        $('#message').focus();
        // Start the connection.
        $.connection.hub.start().done(function () {
            $('#sendmessage').click(function () {
                // Call the Send method on the hub.
                chat.server.send($('#displayname').val(), $('#message').val());
                // Clear text box and reset focus for next comment.
                $('#message').val('').focus();
            });
        });
    });
    // This optional function html-encodes messages for display in the page.
    function htmlEncode(value) {
        var encodedValue = $('<div />').text(value).html();
        return encodedValue;
    }
</script>
}

解決方法は?

A section は、レイアウトに追加されるようなものをビューに追加することができます。

ビュー

@section scripts {

    <script>

      alert('foo');

    </script>

}

レイアウト

@RenderSection("scripts", false)

という名前のこの section スクリプト は、レイアウトで指定された場所にレンダリングされます。

@RenderSection にも2つのシグネチャがあります。

public HelperResult RenderSection(string name) // section required in the view
public HelperResult RenderSection(string name, bool required)