2

MVC 4 で「新規作成」ページを作成しようとしています。ページにはテキスト フィールドとドロップダウン フィールドがあります。ドロップダウン ボックスにリストされている項目を別のモデルから取得したいと考えています。

メイン モデル: (次のコードは一般的な例であるため、構文は無視してください)

public int MainID {get; set;}
public int location {get; set;}
...

モデル:

public int detailID {get; set;}
public int MainID {get; set;}
...
public int actionID {get; set;}

アクション モデル:

public int actionID {get; set;}
public int location {get; set;}
public string action {get; set;}

SomeDetailsに関する追加情報が含まMainれており、 を使用してリンクされてmainIDいます。の「詳細の追加」ページの作成に関心がありますsomeDetails。このページの一部には、 のフィールドにAction基づくドロップダウンが含まれます。locationmain

ドロップダウン ボックスを実装する最良の方法は何でしょうか? ViewBag で可能な値を渡すことを含む解決策がありますが、このラベル付けされた悪い習慣を見てきました。public int actionID {get; set;}のタイプに変更できるのではないかと私も考えていました<List>Action。このメソッドを実行する場合、リストを作成するためのコンストラクターが必要だと思いますsomeDetailsか? someDetails毎回リストを作成しようとするため、特定のものを表示するだけでパフォーマンスの問題が発生しますか?

アクションを作成:

 public ActionResult Create(int id = -1)
    {
        if (id == -1)
        {
            //NOTE: INSERT REDIRECT HERE
        }
        someDetails model = new someDetails();
        model.MainID = id;
        return View(model);
    }

編集:要求に応じて、ビジネスロジックのより良い説明main model私が示したものは、私のコントロール/グループの外にあるデータウェアハウスの一部であるため、変更できない既存のテーブルをモデルにしています。someDetailsこのデータの一部の可視性/追跡を向上させるために、ユーザーが追加できるアプリケーションを作成しています。モデルはAction、場所に基づいて可能なアクション/actionID を表示するだけです。

私のアプリケーションでは、ユーザーがmainモデルから一連の項目を検索またはフィルター処理できるようにします。someDetails次に、アクションを選択するためのテキスト フィールドとドロップダウン リストを含むフォームを表示する追加を許可します。の可能な値を取得するにはaction、次のようにしますSELECT * FROM Action a WHERE a.location = currentLocation

4

1 に答える 1

2

各モデルのプロパティを使用して ViewModel を作成するだけで、その ViewModel をコントローラーに入力してビューに渡すことができます。

編集: DropDownLists の場合:

ViewModel では、選択したアクション ID のプロパティと、リスト自体の別のプロパティが必要です。

モデルでは:

public int actionId { get; set;}
public SelectList ListOfActions { get; set;}
//Other model members

ビューで:

@Html.DropDownListFor(model => model.actionId, Model.ListOfActions, "Select one action", new { @class = "yourclass" })

コントローラーで:

var model = new YourViewModel();
model.ListOfActions = new SelectList(this.GetListOfActions(), "ActionName", "ActionId", [here the selected action id in case you need it])  
于 2012-12-03T18:38:09.053 に答える