如何使用c#文件在body标签上应用css类

时间:2012-02-17 07:50:49

标签: asp.net-mvc-3

我正在使用带有razor引擎的ASP.NET MVC3。我想根据页面调用在body标签上应用css类。 我想在子页面中添加类名,它会影响具有body标签的布局页面。 并且不想使用jquery,因为它在页面渲染后执行。 我怎么能这样做?

4 个答案:

答案 0 :(得分:6)

虽然您可以完全控制HTML,但解决方案是必需的,因此这里有一个; - )

在_layout.cshtml页面

<body class="@RenderSection("BodyClass", false)">

这将在所有子页面中查找一个部分,但如果找不到一个

,请不要担心

然后在您的孩子视图中执行此操作

@section BodyClass {productList}

将它保持在一行,然后输出的HTML看起来很好,你也可以建立类名。

@section BodyClass {productList generic}

这个想法适用于DOM-Ready页面特定代码,为什么不签出 http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

或者我的扩展版本 https://github.com/AaronLayton/H5BP-Core

我的方式允许您执行特定于页面的代码,但允许您将所有Javascript保存在单独的页面中,以便每个页面都易于管理。最后一步是将所有JS连接并缩小为1个文件; - )

答案 1 :(得分:2)

Aaron上面的回答对MVC 3很有用,但我发现MVC 4在单行声明中扼杀:

@section BodyClass {productList}

相反,您需要使用:

@section BodyClass {@("productList")}

答案 2 :(得分:1)

首先,jQuery的.ready函数在DOM可用后执行,因此它是开始与页面元素交互的最佳时刻。 (http://api.jquery.com/ready/)如果您遇到导致样式“闪烁”的行为,您可能不会将display:none应用于body元素,并在应用css类后将其删除。

但是如果你真的不想使用jQuery,你应该考虑制作一个变量来保存你的css类名作为你的控制器将发送给Views的viewmodel的一部分,或者使用ViewBag.CssClass应该是在每个控制器的动作中声明(或在基本控制器的OnActionExecuting方法中声明。

这里要考虑的是理解和遵循MVC模式,其中视图和业务逻辑应该分开。因此,在我看来,您应该避免在视图构建过程中涉及控制器。

答案 3 :(得分:0)

简单地将以下内容放在主要布局

中要容易得多
<body class="@ViewBag.BodyClass">

然后在内容页面中放置:

@{
    ViewBag.BodyClass = "myClass";
}

问题解决了!