在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框架中没有像这样的功能。 我错过了哪一个?
答案 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>