0

オブジェクトのテーブルに編集可能な行のリストが必要です

class Widget
{
    string shape;
    string color;
}

色はドロップダウンリストから来るので、私はこのようなビューモデルを持っています

class WidgetListViewModel
{
    List<Widget> widgets;
    SelectList colorsSelectList;
}

Widget用のEditorTemplate(WidgetEditorTemplate)があります。

ビューでテンプレートがどのように呼び出されるかを次に示します。

for(int i=0; i< in WidgetListViewModel.widgets.Count; i++)
{
    EditorFor(WidgetListViewModel.widgets[i], "WidgetEditorTemplate");
}

私の問題は、WidgetEditorTemplateでcolorsSelectListにアクセスするにはどうすればよいですか?

ウィジェットモデル(または新しいビューモデル)にcolorsSelectListを追加するだけでよいことはわかっていますが、ウィジェットレコードごとにcolorsSelectListをロードする必要があります。

4

1 に答える 1

1

まず、forループを使用する必要はありません。リストでEditorForを使用すると、リスト内の各アイテムに対してウィジェットエディターが自動的に呼び出されます。

それはさておき、あなたが聞きたいものではないことは知っていますが、あなたの賭けの選択肢は、選択した色をウィジェットビューモデルに追加することだと思います。ビューモデルの考え方は、ビューをレンダリングするために必要なすべてのデータが含まれている必要があるということです。この場合、ビューをレンダリングするために色情報が必要なので、ビューモデルに含める必要があります。

もう1つのオプションは、ウィジェットのものをエディターテンプレートではなく部分ビューに配置することです。サーバー側のRenderPartialを使用して、ページが最初に読み込まれるときにそれを含めます。色が変更されたら、ajaxコールバックを実行して、新しい色を使用してパーシャルを再レンダリングできます。このルートでは、遅すぎる可能性のあるコールバックが提供されますが、いずれかのモデルに保存する代わりに、選択した色をパラメーターとして渡すことができます。

于 2012-10-12T17:16:23.863 に答える