2016-06-09 15 views
11

Ho scaricato un esempio di chat dal sito Web di Microsoft. Ho seguito diversi tutorial ma non ho mai visto lo script @section prima di aver eseguito script senza questo blocco di codice C# (@section script {}) e sembra funzionare bene ma in questa istanza dell'applicazione di chat che utilizza segnale quando prendo gli script al di fuori del blocco non funziona.Che cosa sono gli script @section e a cosa serve

@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> 
} 
+1

Sembra che tu non abbia familiarità con la sintassi del rasoio. Leggi questo: http://weblogs.asp.net/scottgu/asp-net-mvc-3-layouts-and-sections-with-razor –

+0

Sì, sono nuovo a .net Ho esperienza con le app Web, ma di solito uso sublime testo o InteliJ. – Decoder94

risposta

16

A section consente di aggiungere qualcosa in una vista che verrà aggiunta nel layout. vale a dire: -

vista

@section scripts { 

    <script> 

     alert('foo'); 

    </script> 

} 

disposizione

@RenderSection("scripts", false) 

Ora questo nome sectionscript sarà reso in cui è stato specificato nel layout.

@RenderSection ha anche 2 firme: -

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

Come posso farlo funzionare senza la sezione per favore? – Decoder94

8

Quando si definisce un @section da qualche parte, consente di dire che il file _Layout.cshmtl, permette tutte le viste per inserire dinamicamente i file di script o file CSS o che cosa mai in luoghi nella pagina di definizione.

Questo è molto utile quando, ad esempio, si sta usando il controllo DatePicker dell'interfaccia utente jQuery solo su un paio di visualizzazioni nel proprio sito. Quindi potresti non voler includere globalmente il file di script jQuery UI Datepicker nel tuo _Layout.cshtml poiché ne avrai solo bisogno in 2 o 3 pagine.

@section consente di includere tali file solo per determinate visualizzazioni. È necessario in quanto, una vista non può facilmente modificare il contenuto dello _Layout.cshtml in caso contrario.

È inoltre possibile posizionare @section nella parte inferiore del layout, per i file JavaScript, ad esempio o nella parte superiore del layout, per i file CSS. Puoi anche usarlo per includere una barra laterale, creata in HTML, solo in certe viste.

È sufficiente tenere presente che le viste parziali non sono in grado di utilizzare l'elemento @section per impostazione predefinita.

+0

Buona spiegazione. Che ne dici della domanda dell'OP: 'Come può farlo funzionare senza la sezione?' – nam

+1

@nam La mia risposta era basata sul titolo della domanda e non ho visto alcun testo nella domanda dell'OP chiedendo come specificare '