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 回答