2011-07-13 31 views
1

にそれを渡す私はMVCにかなり新しいですが、私は次のコードを持っている:Html.DisplayFor(modelItem => item.Status) - switch文

<td> 
     @Html.DisplayFor(modelItem => item.Status) 
     @switch (item.Status) 
     { 
      case 0: Html.DisplayText("Requested"); 
       break; 
      case 1: Html.DisplayText("In Progress"); 
       break; 
      case 2: Html.DisplayText("Declined"); 
       break; 
      default: 
       Html.DisplayText("Undefined"); 
       break; 
     } 
    </td> 

それはレンダリング「をHtml.DisplayFor "これは整数です。しかし、本当に私はitem.Status同じ位置に基づいて同等のテキストを表示したい。しかし、これは動作していません。元のクラスがGetメソッドとSetメソッドのステータスを処理する方法を変更することができますが、どうすればこのようにするのでしょうか?

+2

でswitch文を置き換えるおそらくビューでそのようにロジックをやってはいけません。それはおそらく他の場所で操作されるべきデータであり、それ自体のプロパティとしてモデルに配置されます。 – Chris

答えて

2

このロジックを実行するViewModelにプロパティを作成することができます。このような

public string StatusDescription { 
    get { 
     switch (this.Status) { 
      case 0: 
       return "Requested"; 
      case 1: 
       return "In Progress"; 
      // yada yada yada 
     } 
    } 
} 

そして、あなたのビューのように、

Html.DisplayFor(modelItem => item.StatusDescription); 
+0

ありがとうございました!私は今、このようにしています! – KayBee

1

ステータスに基づいてテキストを表示する宣言的ヘルパーメソッド(http://weblogs.asp.net/mikaelsoderstrom/archive/2010/10/06/declarative-helpers-in-razor.aspx)を作成します。 あなたは、あなたのビューでこれに類似し、それを呼び出すことができます。

@Html.MyHelper(status) 

あるいはさらに良い、オリジナルのポストにコメント投稿のように、あなたがこれを行い、あなたのViewModelのプロパティを作成することができ、と述べました。

0

私はStatusTextプロパティとしてそれを公開しています。

この種のロジックは、実際にはUIとは別にすべきです。