5

アクションまたはビューのどこでSelectListを作成しているのか疑問に思っています。

私は両方の例を見てきましたが、私にとって最も理にかなっているのは、アクションでそれを実行し、ビューモデルにSelectListタイプのプロパティを持たせることです。

一方、ビューモデルにSelectListのプロパティがあり、SelectListがビューモデル内に(コンストラクターまたは遅延読み込みを介して)入力されている例を見てきました。アクションに含まれるコードが少ないことを意味するので、このアイデアが好きです...

要するに、私は人々がATMを何をしているのか疑問に思っていました。

乾杯アンソニー

4

5 に答える 5

5

コントローラでSelectListを作成し(モデルリポジトリからアイテムのリストを検索して)、ViewDataオブジェクトとして、または厳密に型指定されたViewModelの一部としてビューに渡します。

于 2010-02-08T01:37:46.410 に答える
2

これはプレゼンテーション固有の側面なので、Htmlヘルパーを使用してビューで実行することを好みます。そこで、コレクションをビューに渡し、htmlヘルパーメソッドを使用してアイテムをSelectListItemsにマップします。メソッドは次のようになります。

public static IList<SelectListItem> MapToSelectItems<T>(this IEnumerable<T> itemsToMap, Func<T, string> textProperty, Func<T, string> valueProperty, Predicate<T> isSelected)
{
    var result = new List<SelectListItem>();

    foreach (var item in itemsToMap)
    {
        result.Add(new SelectListItem
        {
            Value = valueProperty(item),
            Text = textProperty(item),
            Selected = isSelected(item)
        });
    }
    return result;
}

よろしく。

于 2010-02-08T11:26:43.873 に答える
1

私は通常、アクションレイヤーまたはサービスレイヤーでSelectListを作成し、ViewDataを介してビューに渡します。また、ビューモデルと強く型付けされたビューの一部にしました。ただし、どちらの方法でも、アクションレイヤーまたはサービスレイヤーで作成します。

于 2010-02-08T04:37:50.843 に答える
1

SelectListをビューモデルのプロパティとして公開し、必要なリポジトリを使用してアクションに入力します。リポジトリと直接対話するコードは、コントローラのアクションやサービスレイヤーなど、データの入力も担当するコードである必要があると思います。

ビューモデルから直接リストにデータを入力するのは良い考えではないと思います。ビューモデルにリポジトリの依存関係があり、データベースの相互作用を行う必要があり、ビューモデルがこの種のことを担当するべきではないからです。

複数のSelectListフィールドがあり、アクションコードをよりクリーンに保ちたい場合は、Initializerなどと呼ばれる別の特別なオブジェクトを作成して、すべての入力と初期化を行うこともできます。

于 2010-02-08T07:49:46.073 に答える
0

どちらも、別のクラスで作成します。ここを参照してください。POSTアクションでビューモデルをドメインモデルにマップする方法は?

コントローラでIBuilderインターフェイスを使用し、このBuilderの実装でエンティティ/ビューモデルのすべての構築を行います

于 2010-05-05T18:09:33.980 に答える