将DropDownList填充到ASCX控件中
问题描述:
我想将下拉列表填充到ASCX中。 为此,在控制器中,我使用LINQ查询并将结果填充到viewModel中。 从视图中生成下拉列表,但不能从ASCX生成! 你知道为什么这不起作用吗?将DropDownList填充到ASCX控件中
感谢的提前通过:-)
守则CONTROLER
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"])%>
答
我会使用建议你一个强类型的编辑器模板和放弃的ViewData:
<%: Html.EditorFor(x => x.evaluation) %>
,并在EditorTemplate:
<%: Html.DropDownListFor(x => x.foo, Model.evaluationTypes) %>
UPDATE:
你之后”已经发布你的异常堆栈跟踪我发现了这个问题:
<%: Html.DropDownList("foo", (SelectList)ViewData["EvaluationTypes"])%>
您需要将您的ViewData["EvaluationTypes"]
转换为SelectList
。这是说,那些丑陋的演员应该通过使用强类型助手来避免,正如我在我的初步答案中所建议的那样。
鉴于您使用Model.evaluationTypes,但在ASCX中使用ViewData [“EvaluationTypes”]。你填写ViewData [“评估类型”]? – 2010-11-19 14:53:18
@Pavel,是的,他将它作为'EditorFor'帮手的第二个参数传递给它。 – 2010-11-19 15:01:38