使用IE条件注释的MVC4捆绑/最小化处理

13

我正在尝试使用MVC4的新功能"捆绑和缩小文件"。

对于IE条件注释,我仍然沿用旧方式:<!--[if lt IE 9]><link href=.../><![endif]--> 或者 <!--[if lt IE 9]>@Styles.Render("~/foo")<![endif]--> ,但似乎无法自动处理调试/发布。

是否存在内置方法来处理这个问题?其他人是如何做到的?

编辑:
同时,在渲染输出中包含<noscript>标签将非常有用(用于回退)。

3个回答

15

在我找到更好的方法之前,我创建了一个适配器类名为Bundles,它有一个方法:

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

对于脚本,也有类似的方法。视图可以像这样调用它们:

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

如果有更好的方法,我会欣赏建议。


这种方法的缺点是,如果我有一堆需要“if lt IE 9”和“if lte IE 7”的样式或脚本,那么它们必须被放入单独的捆绑包中,并分别渲染。 - Bobby B
还不确定如何优雅地嵌入<noscript>标签,通常用于CSS回退。 - Bobby B
我觉得这个解决方案非常优雅。 - Steven Ryssaert

5
即将发布的1.1-alpha1更新将支持使用Scripts/Styles helpers自定义标签格式。
新增了一个DefaultTagFormat属性,默认设置为:
""
还有一个RenderFormat方法,可以接受标签格式作为参数。通过这些方法,您应该能够更好地控制渲染。您所尝试做的事情在格式字符串中是否可行?

不确定没有看到样本/签名,但不确定它是否能够与您的新更改一起使用,因为条件注释放置在脚本/样式标记之外。我在答案中描述的方式并不理想,但它可以很好地工作。 - Bobby B
另外,这只是个人偏好!我喜欢使用我的类来调用“Bundles”,而不是“Styles”和“Scripts”。这样更加自包含。不过,你描述的新方法听起来非常有用。 - Bobby B
2
基本上,格式将是我们用来生成单个脚本/链接标记的格式。因此,您可以执行以下操作:Scripts.RenderFormat("<!--[if lte IE 7]>{0}<![endif]-->", paths) - Hao Kung
太棒了,这正是我们所需要的。期待发布。 - Bobby B
3
1.1-alpha1现已在NuGet上发布,您可以尝试使用此版本。请访问http://nuget.org/packages/Microsoft.AspNet.Web.Optimization。 - Hao Kung

-2

我发现的另一种选择在这里:https://coderwall.com/p/5zqvkg

这是一个偏好问题。

(仍然喜欢上面的代码-它更清晰,更易读)

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

)


以上链接发布的解决方案在实践中并不起作用。 - silvio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接