1

これは私たちのふりかえりの際に出てきたもので、追加のフィードバックとスポット チェックが必要でした。現在、ブール値フラグに基づいて有効/無効にするビューが多数あります (Model.IsNew は一例です)。私は、ビューはできるだけ単純であるべきであり、コントローラーはそのビューのデータを決定するべきであり、必ずしもそれがどのように機能するかではないと考えています。部分的または完全なビューは、何をすべきか、何を表示/非表示にするかを決定するビューに対して処理する必要があると思います。非常に基本的な例は次のようになりますが、これの両方の側面をカバーし、主に私たちが持っているものを反映しています...

コントローラーには、Details と呼ばれる一対のメソッド (post/get) があります。[Get]Details には 1 つのパラメータ Id があり、[Post]Details には id とビューモデルがあります。投稿内では、メソッドは有効なモデルをチェックし、新しいかどうかを判断し、特定の値が変更されたかどうか (リダイレクトをトリガーする) など (これは正しくないと思います) までの 30 行の長さです。[Get]Details で空の ID をチェックし、必要なドロップダウンを設定しますが、特別なことは何もありません (これは正しいと思います)。詳細ビュー自体には、少しのロジックが含まれています: If (!Model.IsNew) { RenderAction(History => History.Show(id); } (これは if 内で間違っていると思います。Show は何を表示するかを知っている必要があります。新しいかどうかに関係なく). これに加えて、詳細ビューのレイアウトが 2 回行われないことです. 詳細/追加はほぼ同じです,

考え、意見、洞察?

4

2 に答える 2

5

複数のビューとアクションを作成してみませんか?

Details

Edit
[HttpPost]
Edit

Create
[HttpPost]
Create

次に、Model オブジェクトを共有できます

public ThingModel
{
    public Thing Thing { get; set; }
}

または、組み込みの検証オプションも使用できる、より安全な (html インジェクションを防ぐ) モデルを作成アクションと編集アクションで使用するようにします。

public ThingEditorModel
{
    public int Id { get; set; }
    public string Name { get; set; }
    public string Value { get; set; }
    public bool IsNew { get { return Id == 0; } }
}

そして、編集と作成のために、作成と編集が共有できる EditorTemplate (Shared/EditorTemplates/ThingEditor.ascx) を作成できます。

于 2010-11-29T18:50:08.997 に答える
0

あなたは正しい軌道に乗っていると思います...レイアウトには「メイン」ビューを使用し、「ロジック」にはテンプレート化されたヘルパーを使用します。Html.DisplayFor(x=>x.Thing) と EditorFor に頼る

レイアウトを 2 か所に配置する必要はありません。

于 2010-11-29T18:57:03.087 に答える