2011-10-28 7 views
6

私は、ビューは物事を表示し、情報を表示するために必要なもの以外のロジック自体はしないことを理解します。ビューはどのように分かれていますか?

念頭に置いて、簡単なシナリオのこの種を扱うようにすることを維持するには、最善の方法は何ですか:アイテムがまだショー「あなたができる、他の人に関連付けられている場合

  1. ユーザーがクリックする項目
  2. を削除します。これを削除しないでください。
  3. エルス
  4. 、アクションへの投稿/削除することを確認フォームを表示/ ID

、私は非常に簡単にビューのような何かができます:

@if (Model.Children.Count > 0) 
{ 
    <p> 
    You can't delete this! 
    </p> 
} 
else 
{ 
    using (Html.BeginForm()) 
    { 
    <p> 
     Are you really sure you want to delete this? 
    </p> 
    <p> 
     <input type="submit" value="Confirm" /> | 
     @Html.ActionLink("Cancel", "Index") 
    </p> 
    } 
} 

を二つのビューを作成する魅力的な理由があります何人の子供がいるかに応じてコントローラが適切なビューを返すようにしますか?懸念の単純さと分離のトレードオフのようだ。

+0

を問題ではないはずビューにはなく、子データ状態、ロールメンバーシップ、ビジネスの状況、などの組み合わせを使用してコントローラに充填することができますできるだけシンプルにあなたの意見を作ることが常に良いです。 –

答えて

4

これは非常に簡単な例です。一見したところ、それは無害に見えます(それがそのままであれば、確かにそうです)。ただし、これらの要素を念頭に置いてください。

  • それが単なる子供以上になるとどうなりますか?たぶん3つの他の関係が時間の経過とともに現れ、今あなたはあなたの視点でそれらのすべてをチェックする必要がありますか?突然コードの匂いが強くなります。
  • このタイプのロジックをコントローラに組み込むことで、以前の問題を残さずに「これを削除できません」というフィードバックをユーザに与えることができるAjaxバージョンを追加するなど、ページ。
3

2つの異なるビューでそれらを区切り、コントローラのアクションでビューモデルの値(この場合はChildren.Count)に基づいて正しいビューを選択させることができます。しかし、これは、他のアプローチはどちらも間違っていないと言われています。このような単純なシナリオではうまくいきます。

2

このようなシナリオでは、実際にはビューを削除できるかどうかのフラグ(実際にはViewModelのアプローチに沿っています)が表示されます実際にロジックを実行すると、コントローラーは使用可能なアクションを表示しているだけです。

@if(Model.CanDelete) { 
    using (Html.BeginForm()) 
    { 
     <p> 
     Are you really sure you want to delete this? 
     </p> 
     <p> 
      <input type="submit" value="Confirm" /> | 
      @Html.ActionLink("Cancel", "Index") 
     </p> 
    } 
} else { 
    <p>You can't delete this!</p> 
} 

CanDeleteは、私は2つのビューを使用しますその原料のすべてが

関連する問題