2012-02-17 94 views
1

我正在使用带有剃须刀引擎的ASP.NET MVC3。我想根据页面调用在body标签上应用css类。 我想在子页面添加类名,它会影响具有body标签的布局页面。 并且不想使用jquery,因为它在页面呈现后执行。 我该怎么做?如何使用C#文件在body标签上应用css类

回答

1

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

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

这里要考虑的事情是理解和遵循MVC模式,其中视图和业务逻辑应该被分开,所以我认为你应该避免涉及控制器在视图中构建过程

6

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

在_layout.cshtml页面

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

这将寻找在所有子页面的部分,但如果它无法找到你的孩子一个视图

然后说不用担心只要做到这一点

@section BodyClass {productList} 

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

@section BodyClass {productList generic} 

这种想法去完善与DOM就绪页特定的代码,为什么不签 http://paulirish.com/2009/markup-based-unobtrusive-comprehensive-dom-ready-execution/

还是我在这里扩展版本 https://github.com/AaronLayton/H5BP-Core

我的方式让你做网页的特定代码,但允许你将所有的Javascript保存在不同的页面中,这样每个页面都可以轻松管理。最后一步将是串联和所有的JS再压缩至1个文件;-)

+0

我已经使用了这个方法一段时间,但它不喜欢MVC 4中的单行节语句。你是否也看到过MVC 4?有任何想法吗? – 2013-02-19 20:17:28

+0

我刚找到答案。我会在下面发布。 – 2013-02-19 20:41:38

2

阿龙的回答上面MVC 3的伟大工程,但我发现,MVC 4,当单线上部分的语句扼流圈:

@section BodyClass {productList} 

相反,你需要使用:

@section BodyClass {@("productList")} 
0

这是很容易简单地把你的主要布局以下

<body class="@ViewBag.BodyClass"> 

然后在内容页的说:

@{ 
    ViewBag.BodyClass = "myClass"; 
} 

问题解决了!