13

Próbuję użyć nowego "łączenia i minimalizowania" MVC4.Łączenie/minimalizowanie MVC4 z warunkowymi komentarzami IE

W przypadku warunkowych komentarzy IE nadal robię to w starym stylu: <!--[if lt IE 9]><link href=.../><![endif]--> lub <!--[if lt IE 9]>@Styles.Render("~/foo")<![endif]-->, ale nie wydaje mi się, aby obsługa automatycznego debugowania/zwalniania była automatyczna.

Czy jest to wbudowany sposób, aby to zrobić? Jak robią to inni?

EDYTOWANIE: Również wspaniale byłoby móc umieszczać znaczniki <noscript> w renderowanym pliku wyjściowym (używanym do tworzenia kopii zapasowych).

Odpowiedz

15

Dopóki nie znajdę lepszego sposobu, zrobiłem klasy adaptera nazwie Bundles, który ma metodę:

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); 
} 

istnieje podobny sposób do skryptów. Widok nazywa je jako takie:

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

Jeśli jest lepszy sposób, będę wdzięczny za radę.

+0

Wadą tego podejścia jest to, że jeśli mam garść stylów lub skryptów, które wymagają "if IE 9" i "if lte IE 7", to należy je umieścić w osobnych pakietach i renderować osobno . –

+0

Nie jest również pewny elegancki sposób pieczenia w tagu '

+0

Znalazłem to rozwiązanie dość elegancko –

5

Niedługo wydana aktualizacja 1.1-alpha1 będzie wspierała tworzenie własnego formatu znaczników za pomocą pomocników skryptów/stylów.

Jest to nowy obiekt DefaultTagFormat który jest domyślnie ustawiona na wartość:

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

Istnieje również metoda RenderFormat która odbywa się w formacie tag, jak również. Powinieneś być w stanie kontrolować renderowanie nieco więcej z tymi. Czy to, co próbujesz zrobić w ciągi formatu?

+0

Nie jestem pewien, nie widząc próbki/podpisu, ale nie jestem pewien, czy może to działać z nowymi zmianami, ponieważ komentarze warunkowe są umieszczane poza znacznikiem skryptu/stylu. Sposób, który opisałem w mojej odpowiedzi, nie jest idealny, ale działa ładnie. –

+0

Również, i to jest tylko osobiste preferencje !, Lubię zdolność używania mojej klasy do wywoływania 'Pakiety' zamiast' Stylów' i 'Skryptów'. Jest bardziej samowystarczalny. Nowe metody, które opisałeś, są jednak bardzo przydatne. –

+2

Zasadniczo format jest tym, czego używamy do generowania pojedynczych znaczników skryptu/łącza. Możesz zrobić coś takiego: Scripts.RenderFormat (" {0} ", ścieżki) –

-2

Alternatywą znalazłem tutaj: https://coderwall.com/p/5zqvkg

Jest to kwestia preferencji

(Wciąż kocham kod powyżej - jest znacznie czystsze i czyta łatwiej

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

)

+0

Powyższy link zamieszcza rozwiązanie, które nie działa w praktyce – WebDever