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

なぜ関数が必要なのですか?オペレーターは?すでに必要なことを行っています。関数を使用するポイントは、1 つの場所に実装し、必要な場所で使用することです。したがって、その関数内で動作を変更すると、すべてが「更新」されます。ここでは、演算子の関数を作成する意味がわかりません。あなたはただ使うことができます@(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;}
}

s を作成するとき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> 
于 2012-11-25T01:52:02.733 に答える