13

Sto tentando di utilizzare il nuovo "bundling e minification" di MVC4.MVC4 bundling/minification con commenti condizionali IE

per IE commenti condizionali, sto ancora facendo il vecchio modo: <!--[if lt IE 9]><link href=.../><![endif]--> o <!--[if lt IE 9]>@Styles.Render("~/foo")<![endif]--> ma non sembrano per ottenere la gestione automatica di debug/release.

C'è un modo integrato per farlo? Come stanno facendo gli altri?

MODIFICA:
Inoltre sarebbe bello poter includere i tag <noscript> all'interno dell'output reso (utilizzato per fallback).

risposta

15

Fino a trovare un modo migliore, ho fatto una classe adattatore chiamato Bundles, che ha il metodo:

public static IHtmlString RenderStylesIe(string ie, params string[] paths) { 
    var tag = string.Format("<!--[if {0}]>{1}<![endif]-->", ie, Styles.Render(paths)); 
    return new MvcHtmlString(tag); 
} 

C'è un metodo simile per gli script. Una vista li chiama così:

@Bundles.RenderStylesIe("lt IE 9", "~/Content/foo") 
@Bundles.RenderScriptsIe("lte IE 7", "~/Scripts/bar") 

Se c'è un modo migliore, apprezzerei il consiglio.

+0

Il vantaggio di questo approccio è che se ho un sacco di stili o script che richiedono "if lt IE 9" e "if lte IE 7" allora questi devono essere messi in bundle separati e resi separatamente . –

+0

Incerto anche di un modo elegante per cuocere nel tag '

+0

Ho trovato questa soluzione abbastanza elegante –

5

Il prossimo aggiornamento 1.1-alpha1 avrà un supporto che esegue la formattazione del proprio tag con gli helper Scripts/Styles.

C'è una nuova proprietà che è DefaultTagFormat impostazione predefinita per:

"<script src="{0}"></script>"

C'è anche un metodo RenderFormat che prende in formato tag pure. Dovresti essere in grado di controllare il rendering un po 'di più con questi. È ciò che stai cercando di fare con una stringa di formato?

+0

Non sono sicuro di aver visto un campione/firma, ma non sono sicuro che possa funzionare con le nuove modifiche, dato che i commenti condizionali sono posizionati al di fuori del tag script/style. Il modo in cui ho descritto nella mia risposta non è l'ideale, ma funziona bene. –

+0

Inoltre, e questa è solo una preferenza personale !, Mi piace l'abilità che usa la mia classe di chiamare 'Bundles' piuttosto che' Styles' e 'Scripts'. È più autonomo. I nuovi metodi che hai descritto sembrano molto utili. –

+2

Fondamentalmente il formato sarebbe quello che usiamo per generare singoli tag script/link. Quindi potresti fare qualcosa del tipo: Scripts.RenderFormat (" {0} ", percorsi) –

-2

Un'alternativa ho trovato è stato qui: https://coderwall.com/p/5zqvkg

Si tratta di una questione di preferenza

(Ancora amore codice di cui sopra - è molto più pulito e legge più facile

@Bundles.RenderStylesIe("lt IE 9", "~/Content/foo") 
@Bundles.RenderScriptsIe("lte IE 7", "~/Scripts/bar") 

)

+0

Il link precedente pubblica una soluzione che non funziona nella pratica – WebDever