0

在 web 开发过程中,有很多场景我想根据条件输出一个字符串(例如 CSS 类)。流行的是:活跃的,甚至,...

在总是在特定条件下重复相同的功能之后,我现在写了一个可重用的功能并想将它添加到我的助手中。像这样:

public static string StringOnCondition (condition, returnString) {
    return (condition) ? returnString : "";
}

这样我就可以在这种情况下使用它:

    <li class="classRoom">
        <a href="/messages/" class="classRoomName @Helpers.StringOnCondition(Model.Url == "/messages/", "active")">Inbox</a> 
    </li>     

但实际上,我不敢相信 .NET 框架中还没有这样的功能。那么我错过了哪一个?

4

2 回答 2

4

为什么需要一个函数??运营商已经做了你需要的。使用函数的目的是在一个地方实现并在需要的地方使用它,因此如果您更改该函数中的行为,一切都会“更新”。在这里,我看不到为操作员创建函数的意义。你可以只使用@(Model.Url == "/messages/" ? "active" : string.Empty). 它更短,可以满足您的需求。

于 2012-11-25T02:20:01.450 回答
3

我采用将使用哪个字符串的逻辑移动到视图模型类的方法。例如:

public class EmployeeRowViewModel
{
  public string CssClass {get;set;}
  public Employee Row {get;set;}
}

在构建RowViewModels 时,我为每一行分配正确的类,然后在视图中使用模型时,使用正确的 CSS 类字符串。

通常,当我在视图中看到太多逻辑发生时,我认为这是一种“难闻的气味”,并尝试将逻辑分解到视图模型中。

更新:

根据原贴的新场景,我仍然相信逻辑可以移出视图。例如,您可以将计算属性添加到视图:

public class EmployeeRowViewModel
{
  public string CssClass {get;set;}
  public string Url {get;set;}
  public string CssActive
  {
    get { return (Url == "/messages/") ? "active" : null; }
  }
  public Employee Row {get;set;}
}

然后将您的视图更新为:

<li class="classRoom">
  <a href="/messages/" class="classRoomName @Model.CssActive">Inbox</a> 
</li> 
于 2012-11-25T01:52:02.733 回答