2011-10-18 10 views
33

Sto cercando di separare tutte le cose che potrei riutilizzare nelle sezioni, quindi sarebbe più facile per me mantenere.Il file "~/Views/Position/Edit.cshtml" non può essere richiesto direttamente perché chiama il metodo "RenderSection"

Tuttavia ho avuto questa eccezione: Il file "~/Vista/Ruolo/Edit.cshtml" non può essere richiesto direttamente perché chiama il metodo "RenderSection"

ho creato un file chiamato sections.cshtml con la seguente contenuto:

@section scripts{ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

E nel file _layout.cshtml ho cambiato in:

<head> 
    <meta charset="utf-8" /> 
    <title>@ViewBag.Title</title> 
    <link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" /> 
    @RenderSection("scripts", required:false) 
    @*<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>*@ 
</head> 

Quando vado alla vista nel browser e controlla il codice sorgente che mostra solo:

<head> 
    <meta charset="utf-8" /> 
    <title>Edit</title> 
    <link href="/Content/Site.css" rel="stylesheet" type="text/css" /> 
</head> 
+0

Perché non basta mettere gli script nel file di layout? – samack

+0

solo cercando di imparare come usare le sezioni in mvc, ma sì questa è anche un'opzione, ma che dire se alcuni script saranno usati su alcune viste e altri script in altre viste? Le sezioni risolverebbero questo problema, ma il file di layout non lo risolverebbe, giusto? –

+0

Sbarazzati di @RenderSection e inserisci gli script in ... è il punto del file di layout per archiviare queste cose che sono comuni nella maggior parte delle tue pagine. – samack

risposta

32

RenderSection può esistere solo nei file di layout (ad es. pagine principali) ... il suo scopo è quello di consentire alle pagine che è possibile richiedere direttamente di indirizzare varie sezioni di un layout (il layout è un file comune a tutte le pagine che scelgono di utilizzarlo) e fornire il contenuto per queste diverse sezioni.

Se si vuole separare questa sezione come qualcosa che è resuable in molte pagine si dovrebbe mettere in un parziale e sostituire la chiamata rendersection a qualcosa come

@Html.Partial("Scripts") 
+1

si prega di controllare la modifica, ho provato a farlo usando il file di layout invece di viste parziali e non funziona, non ho nemmeno un'eccezione. –

+0

Se cambio la sezione richiesta su true, mi dà questa eccezione: Sezione non definita: "script", Devo posizionare la sezione da qualche altra parte ?? –

+0

Ciò è dovuto al fatto che il file richiesto deve avere una sezione in esso contrassegnata come script @section {....} con .... contenente il contenuto di ciò che deve andare nel file Layout nel punto in cui @RenderSection ("scripts") è chiamato ... le sezioni non servono per definire la funzionalità comune. Ecco quali sono i partial per –

12

In alternativa si potrebbe utilizzare helper per separare il codice usi più spesso. Soprattutto se non è possibile utilizzare sections a causa del vincolo menzionato da martin-mooth.

@helper Scripts(){ 
    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 
} 

e l'utilizzo è solo:

<somehtml /> 
@Scripts() 
<somehtml /> 
+3

E se gli script dovessero andare nel tag ? –

Problemi correlati