4

私の質問はこれに近いと思いますが、このようなコードをどこに置くべきかについて、より一般的な議論が必要です。Asp.Net MVC SelectList リファクタリングの質問?

私は現在、自分のエンティティ モデルで選択リストを直接作成しています。

public SelectList taskDeadlineTime
    {
        get { return new SelectList(TimeDictionary, "Value", "Key", this.getDeadlineTime()); }
    }

モデル内でビュー作業を行っているかのように、これは少し間違っているように感じます。

ただし、プロパティを取得でき、選択リストがそこにあることを意味します。

さて、このロジックをコントローラー (記述するコードが増える) またはビュー (間違っていると感じる) または別の方法で実行する必要があります。

私が今これを見ている理由は、同じオブジェクト エンティティの 2 つのコピーを比較する作業を行っており、選択リストをゲッターの一部として直接使用すると、それが機能しないことを意味するためです。これを処理するためにこの比較を変更できることはわかっていますが、モデルで視覚的に何かを行うのは間違っているように感じます (選択リストの準備がモデルに含まれているのが正しい場合を除きます)。

4

2 に答える 2

7

I usually put this into the view.

ViewModel:

public IEnumerable<Foo> TaskDeadlineTimes { get; set; }

View:

<%= Html.DropDownListFor(
    x => x.SelectedValue, 
    new SelectList(Model.TaskDeadlineTimes, "Value", "Key")
) %>

そして、コントローラはリポジトリを使用してこのプロパティ値を設定します。

于 2010-09-19T17:51:15.253 に答える
0

ビルダーと呼ばれる追加のレイヤーがあります。

コントローラーはビルダーを作成し、必要な情報をそれに渡します。

Builder は、コンテキスト (現在のユーザー、その役割など) + データ レイヤーと対話し、すべての有効なデータを使用してモデルを生成します。

コントローラーより、このモデルをビューに渡します。

于 2010-09-19T18:03:30.897 に答える