2015-04-29 12 views
5

Diciamo che avevamo uno scenario in cui la nostra app non avrebbe utilizzato jqueryui, ad eccezione di un particolare modello di editor. Se voglio evitare di inserire jqueryui su ogni pagina (cioè non voglio includerlo nei bundle che sono caricati di default nel mio _Layout.cshtml), come posso avere il modello di editor include il jqueryui.js e jqueryui.css file per me in un modo che non risulterebbe in più riferimenti a quei file, e metterebbe i riferimenti nell'intestazione o alla fine del mio corpo invece di inline?Come aggiungere codice di riferimento JavaScript o css da un modello di editor

Ecco quello che ho provato nel mio editor di modelli che non ha sembrano funzionare:

@System.Web.Optimization.Scripts.Render("~/bundles/jqueryui") 
@System.Web.Optimization.Styles.Render("~/Content/jqueryuistyles") 

Questa aggiunti i tag di script e di collegamento, ma rende i tag una volta per l'uso dell'editor template, e li rende anche in linea, quindi nel mio caso, prima che jQuery sia stato caricato nella parte inferiore del corpo.

@section Scripts{ <script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/bundles/jqueryui")"></script> } 

Questo corrisponde a quanto io includo il fagotto nel mio _Layout.cshtml, ma questo a quanto pare non funziona da un editor di modelli. Nulla è stato reso a tutti, e anche se lo fosse, penso che sarebbe ancora in più riferimenti al file JavaScript (1 per volta che il modello di editor è stato chiamato)

Sembra che ci dovrebbe essere un modo per avere un modello di editor fa scattare l'inclusione di un file JavaScript o css che può collegarsi ai bundle o almeno al sistema @section. Qualcuno sa come fare questo?

+1

Questo è esattamente il motivo per cui non includi mai gli script nei modelli di editor o partial. Perché non aggiungere gli script solo alla vista specifica piuttosto che al layout. –

+0

Si potrebbe dare un'occhiata a [requirejs] (http://requirejs.org/). –

+0

@StephenMuecke Perché non metterlo in vista? Io sicuramente * potrei *, ma se tornassi più tardi e cambiassi il mio modello di editor da jqueryui a qualcosa di nuovo ... allora avrei dovuto rintracciare tutte le viste che lo usavano e ripulirle. In altre parole, penso che la vista non debba preoccuparsi di quali script richiedono i suoi modelli di editor. Mi piace l'idea che il modello di editor sia completamente autonomo. – ctb

risposta

-2

All'interno della vostra pagina di _Layout.cshtml si può avere una sezione facoltativa JQuery UI

@RenderSection("JQueryUIOptional", required: false) 

Poi, quando la visualizzazione viene chiamato, il rendering che la sezione con:

@section JQueryUIOptional 
{ 
    <script type="text/javascript" src="@Url.Content("~/Scripts/path-To-Jquery-UI.js")"></script> 
    <link href="@Url.Content("~/Content/styles/path-to-JqueryUIstyles.css")" rel="stylesheet" type="text/css" /> 
} 
+0

Potrebbe entrare nel modello di editor? Questo è ciò che l'OP sta chiedendo. –

+0

_Layout.cshtml è un esempio di uno dei tepmplates dell'editor che l'OP sta cercando. Quindi la risposta è sì – AutomationNation

+0

\ _Layout.cshtml è un _layout_, non un modello di editor. –

1

Un modo per ottenere questo risultato può essere richiedere i file javascript richiesti utilizzando il contesto di richiesta corrente. Ad esempio all'interno di editor di modelli è possibile scrivere qualcosa di simile per richiedere un javascript includono

HttpContext.Current.Items["Required.Script"] = "~/myeditortemplate.js"; 

Poi nel layout poco prima del rendering di qualsiasi sezione script opzionale si può rendere script richiesto, cercando in contesto attuale

Scripts.Render(HttpContext.Current.Items["Required.Script"].ToString()) 

Dove script utilizza i pacchetti di script in MVC. In alternativa puoi semplicemente emettere il tag script point src nello script richiesto.

Problemi correlati