1

トーナメント コントローラーに次のアクション メソッドがあります。

    public ActionResult Edit(int id) {
        EditTournamentViewModel viewModel = new EditTournamentViewModel {
            Tournament = _tournamentService.GetTournamentByID(id),
            TournamentDivisions = _divisionService.GetTournamentDivisions(id).ToList()
        };

        ViewBag.SportID = new SelectList(_sportService.GetSports(), "SportID", "Name");
        ViewBag.CountryID = new SelectList(_countryService.GetCountries(), "CountryID", "Name");

        return View(viewModel);
    }

2 つのビューバッグ項目は、入力される選択リストです。firebug でページを調べると、 SelectList の名前は ですViewBag.SportIDSportIDこれは私が期待するものです。しかし、そこで選択した値をviewModelのプロパティSportIDのプロパティに入力したいのです。Tournamentしたがって、名前はTournament.SportID.

これを達成する方法がわかりません。Razor で SelectList の名前を次のように変更できませんでした。

        <div class="editor-field"> 
            @Html.DropDownList("SportID", "Select a sport", new { name = "Tournament.SportID" } )
            @Html.ValidationMessageFor(t => t.Tournament.Sport) 
        </div>

これは私の見解にあるコードです:

        <div class="editor-field"> 
            @Html.DropDownList("SportID", "Select a sport")
            @Html.ValidationMessageFor(t => t.Tournament.Sport) 
        </div>

私が取ることができる解決策は、ビューモデルにプロパティを持つ代わりにTournament、個々のプロパティをコピーしてからオートマッパーを使用することですが、それを行わなくても修正があるかどうかを知りたいです (もちろん、私が行っていることを除きます)非常に悪い習慣と見なされます)。

4

1 に答える 1

1

試しましたか

@Html.DropDownListFor(m => m.Tournament.SportID, ViewBag.SportID, "Select a sport")

(たとえば、更新のためにTournament.SportIdの実際の値が必要な場合は、SelectListのさまざまなコンストラクターを調べて、「ViewBagの作成」で変更できます)

修正 :

SelectList sportList = ViewBag.SportID;

@Html.DropDownListFor(m => m.Tournament.SportID, sportList, "Select a sport")
于 2012-04-28T21:53:42.970 に答える