0

ドロップダウン リストを ASCX に入力したいと考えています。これを行うには、コントローラーで LINQ クエリを使用し、結果を viewModel に入力します。ビューからはドロップダウンを生成できますが、ASCX からは生成できません。なぜこれがうまくいかないのか考えていますか?

よろしくお願いします:-)

コントローラー内のコード

var query = from foo in session.Linq<PROJECT.Models.bar>() select foo;
PROJECT.ViewModels.myviewmodel viewModel = new PROJECT.ViewModels.myviewmodel();
viewModel.data = new SelectList(query, "Id", "title");
return View(viewModel);

ビュー内のコード

<h2>Create</h2>
<%= Html.EditorFor(a => a.evaluation, new { EvaluationTypes = Model.evaluationTypes })%>            
<!-- Generate from here is ok -->
<%: Html.DropDownList("foo",Model.evaluationTypes) %>

ASCX のコード

<%= ViewData["EvaluationTypes"] %>    
<%: Html.DropDownList("foo", ViewData["EvaluationTypes"])%>
4

1 に答える 1

3

強く型付けされたエディターテンプレートを使用して、ViewDataを破棄することをお勧めします。

<%: Html.EditorFor(x => x.evaluation) %>

およびEditorTemplate内:

<%: Html.DropDownListFor(x => x.foo, Model.evaluationTypes) %>

アップデート:

例外スタックトレースを投稿した後、問題を発見しました。

<%: Html.DropDownList("foo", (SelectList)ViewData["EvaluationTypes"])%>

あなたはあなたにキャストする必要がありSelectListますViewData["EvaluationTypes"]。これは、最初の回答で提案したように、強く型付けされたヘルパーを使用することで、これらの醜いキャストを避ける必要があると言われています。

于 2010-11-19T14:53:45.897 に答える