ASP.NET MVC: Qual é o objetivo da @section? [fechadas]

132

Para um aplicativo ASP.NET MVC, vi este artigo do blog . O autor ScottGu adiciona @sectionao Index.cshtml.

Tenho algumas perguntas (consultando o artigo acima):

  • Index.cshtml é uma Visualização compartilhada?
  • O código de exemplo usa o @sectioncódigo em uma exibição específica. Por quê?

Alguém pode explicar por que e quando eu usaria @sectionem um View?

A Bogus
fonte
4
Dê uma olhada neste tutorial: weblogs.asp.net/scottgu/archive/2010/12/30/…
Adriano Repetti 26/12
1
Embora se possa argumentar que um melhor motivo de fechamento hoje seria "principalmente baseado em opiniões", ele ainda estaria fechado. Não há uma maneira definitiva de usar seções.
Richard
2
Não há maneira definitiva de usar qualquer coisa. Basta olhar para como as pessoas usam a internet ...
Keji

Respostas:

138

@sectioné para definir que um conteúdo seja substituído em uma exibição compartilhada. Basicamente, é uma maneira de você ajustar sua exibição compartilhada (semelhante a uma Página Mestra em Formulários da Web).

Você pode achar que Scott Gu escreveu isso muito interessante .

Editar: com base em esclarecimentos adicionais de perguntas

A @RenderSectionsintaxe entra na Visualização compartilhada, como:

<div id="sidebar">
    @RenderSection("Sidebar", required: false)
</div>

Isso seria colocado na sua visualização com @Sectionsintaxe:

@section Sidebar{
    <!-- Content Here -->
}

No MVC3 +, você pode definir o arquivo de Layout a ser usado diretamente para a visualização ou pode ter uma visualização padrão para todas as visualizações.

Configurações comuns de exibição podem ser definidas em _ViewStart.cshtml, que define a exibição de layout padrão semelhante a esta:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

Você também pode definir a Visualização compartilhada para usar diretamente no arquivo, como index.cshtml diretamente, conforme mostrado neste snippet.

@{
    ViewBag.Title = "Corporate Homepage";
    ViewBag.BodyID = "page-home";
    Layout = "~/Views/Shared/_Layout2.cshtml";
}

Existem várias maneiras de ajustar essa configuração com mais algumas mencionadas nesta resposta do SO .

Frazell Thomas
fonte
Obrigado Frazell! Eu adicionei mais à minha pergunta em referência a esse tutorial. Você pode explicar mais? Obrigado novamente!
A Bogus
Hey @ABogus Atualizei a resposta. Esperemos que esta informação adicional é :) útil
Frazell Thomas
21

Um bom exemplo é o Javascript. Você deseja que isso fique na parte inferior da página renderizada no navegador, porque essa é uma prática recomendada.

Como você faria isso a partir de uma exibição baseada em um layout / página principal, onde você só pode acessar o meio da página?

Você faz isso declarando uma seção Scripts na parte inferior da página Layout. Em seguida, você pode adicionar conteúdo, neste caso, o Javascript inclui (espero!), Da página Visualizar até a parte inferior da página de layout.

John Mc
fonte
4

Você deseja usar seções quando desejar que um pouco de código / conteúdo seja renderizado em um espaço reservado que foi definido em uma página de layout.

No exemplo específico que você vinculou, ele definiu o RenderSection no _Layout.cshtml. Qualquer visualização que use esse layout pode definir uma seção @ com o mesmo nome definido em Layout e substituirá a chamada RenderSection no layout.

Talvez você esteja se perguntando como sabemos que o Index.cshtml usa esse layout? Isso se deve a um pouco da convenção MVC / Razor. Se você olhar para a caixa de diálogo em que ele está adicionando a visualização, a caixa "Usar layout ou página principal" está marcada e logo abaixo diz "Deixe em branco se estiver definido em um arquivo Razor _viewstart". Não é mostrado, mas dentro desse arquivo _ViewStart.cshtml existe um código como:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

A maneira como os viewstarts funcionam é que qualquer arquivo cshtml dentro do mesmo diretório ou diretórios filho executará o ViewStart antes de ser executado.

Qual é o que nos diz que Index.cshtml usa Shared / _Layout.cshtml.

ischell
fonte
Boa explicação sobre _ViewStart.
ᴍᴀᴛᴛ ʙᴀᴋᴇʀ
3

Permite definir um @Sectioncódigo no seu modelo que pode ser incluído em outros arquivos. Por exemplo, uma barra lateral definida no modelo pode ser referenciada em outra visualização incluída.

//This could be used to render a @Section defined as @Section SideBar { ...
@RenderSection("SideBar", required: false);

Espero que isto ajude.

chrislhardin
fonte