ASP.NET MVC:其他人如何应用条件CSS类?

Sea*_*ean 8 css asp.net asp.net-mvc asp.net-mvc-3

假设我有两种称为january和的CSS样式tuesday.我想将它们应用到我视图中的某些文本字段,具体取决于它是1月还是2月.

选项A:执行控制器中的逻辑,并将样式放在ViewData中.

在控制器中:

if( month == Month.January) 
  ViewBag.UserNameCssStyles = "january";
if( today == Day.Tuesday )
  ViewBag.UserNameCssStyles += " tuesday";
Run Code Online (Sandbox Code Playgroud)

在视图中:

@Html.TextBoxFor(model => model.UserName, new { @class = ViewBag.UserNameCssStyles }
Run Code Online (Sandbox Code Playgroud)

选项B:执行控制器中的逻辑并在视图中指定样式?

在控制器中:

ViewBag.IsJanuary = (month == Month.January);
ViewBag.IsTuesday = (today == Day.Tuesday);
Run Code Online (Sandbox Code Playgroud)

在视图中:

@if (ViewBag.IsJanuary && !ViewBag.IsTuesday) 
{
  @Html.TextBoxFor(model => model.UserName, new { @class = "january" })
}
else if (!ViewBag.IsJanuary && ViewBag.IsTuesday)
{
  @Html.TextBoxFor(model => model.UserName, new { @class = "tuesday" })
}
else if(ViewBag.IsJanuary && ViewBag.IsTuesday)
{
  @Html.TextBoxFor(model => model.UserName, new { @class = "january tuesday" })
}
else
{
  @Html.TextBoxFor(model => model.UserName)
}
Run Code Online (Sandbox Code Playgroud)

这两种方式对我来说都不对.第一个选项让控制器关注自己的显示,并且还有一些锁定样式,因此在视图上工作的人不能更改它们,比如添加第三个类.但是第二种选择似乎非常逻辑,因为它只是"愚蠢"的观点.

其他人通常如何做到这一点?

Tod*_*ith 10

选项C:执行控制器中的逻辑并在视图中分配样式,但方式更简单:

在控制器中:

ViewBag.IsJanuary = (month == Month.January);
ViewBag.IsTuesday = (today == Day.Tuesday);
Run Code Online (Sandbox Code Playgroud)

在视图中:

@string userNameClass = string.Empty;
@userNameClass += ViewBag.IsJanuary ? "january " : "";
@userNameClass += ViewBag.IsTuesday ? "tuesday " : "";

@Html.TextBoxFor(model => model.UserName, new { @class = userNameClass })
Run Code Online (Sandbox Code Playgroud)

否则你的控制器会受到视图问题的污染.除非你是google并且每个字节都很重要,否则空类几乎是无害的.