2011-09-23 8 views
5

コントローラがアイテムのリストを自分のビューに戻します。メッセージが表示される項目がない場合は、「項目がありません」というケースを処理する必要があります。ビューで「アイテムなし」メッセージを表示する適切なMVC方法

私はどちらか:

  1. チェック私のコントローラからlist.Count、ちょうどそのメッセージを含むビューを返し、またはビュー自体から
  2. チェックlist.Count、およびメッセージやアイテムを表示それに応じて。

私は、ビューにはロジックがないはずなので、純粋なMVCの方法は上記の#1になるはずです。私は間違っているのですか、それともMVCで受け入れられていますか?どうもありがとう。

答えて

14

これは閲覧者の責任です。モデル数を確認し、それに従って行動する:

@model IEnumerable<MyViewModel> 

@if (Model.Count() > 0) 
{ 
    ... 
} 
else 
{ 
    <div>Nothing to display here</div> 
} 

をそして、あなたは、例えばのようないくつかのグリッド・ヘルパーを使用していた場合MVCContrib Gridあなたも視野にifを必要としません:まあ

@model IEnumerable<MyViewModel> 
@Html.Grid(Model) 
    .Empty("Nothing to display here") 
    .Columns(column => 
    { 
     ... 
    }) 
) 
3

いくつかの意見に同意しないかもしれませんが、すべて論理を削除することは非現実的です。それは...私たちがビューロジックについて話しているならば。

メッセージを設定した場合でも、メッセージを表示するためには何らかのロジックを実行する必要があります。特に、それ以外の場合は空の出力用のヘッダーは不要です。

私は、最大のことは、あなたのやり方が一貫していることを示唆しています...しかし、それはあなたにとって理にかなっています。ロジックをデータを表示するために必要なものに制限してください。

+2

私は同意すると、カウントのようなものを検出して「結果なし」と表示するのは問題ありませんが、一貫性を保ちます。私たちが何処でも使うことができないならば、なぜRazorを持っているのでしょうか? – Jack

1

ビューにはビューロジックを含めることはできますが、ビジネスロジックは含まれません。だからあなたのオプション#2は大丈夫です。

1

、あなたが正しいです。あなたのビューにはロジックはありませんが、コントローラーは簡単です。単純な状態チェックとループは完全にうまくいきます。個人的に私はコントローラーレベルでカウントをチェックし、その結果をビューバックなどに入れます。それから私はビューのビューバッグをチェックします。

+0

しかし、あなたはまだあなたのビューで論理を持っています:) – Jack

+0

'条件チェックとループ'は論理です。 –

関連する問題