是否有.NET函数根据条件输出字符串?

时间:2012-11-25 01:47:12

标签: c# .net

在webdevelopment期间,有很多场景需要根据条件输出字符串(例如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框架中没有像这样的功能。 我错过了哪一个?

2 个答案:

答案 0 :(得分:4)

为什么需要一个功能? ?运算符已经满足您的需求。使用函数的关键是在一个地方实现并在需要的地方使用它,所以如果你改变了那个函数中的行为,那么一切都是“更新的”。在这里,我没有看到为操作员创建功能的重点。您可以使用@(Model.Url == "/messages/" ? "active" : string.Empty)。它更短,它可以满足您的需求。

答案 1 :(得分:3)

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

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

在构建RowViewModel时,我为每一行分配了正确的类,然后在视图中使用模型时,使用了正确的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>