将DropDownList填充到ASCX控件中

时间:2010-11-19 14:47:43

标签: c# asp.net-mvc-2 drop-down-menu viewmodel viewdata

我想将下拉列表填入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"])%>

1 个答案:

答案 0 :(得分:3)

我建议您使用强类型编辑器模板并放弃ViewData:

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

并在EditorTemplate:

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

更新:

在您发布了异常堆栈跟踪后,我发现了问题:

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

您需要投放到SelectList ViewData["EvaluationTypes"]。据说,正如我在初步答复中所建议的那样,应该使用强类型助手避免那些丑陋的演员。