将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"])%> 
+0

鉴于您使用Model.evaluationTypes,但在ASCX中使用ViewData [“EvaluationTypes”]。你填写ViewData [“评估类型”]? – 2010-11-19 14:53:18

+0

@Pavel,是的,他将它作为'EditorFor'帮手的第二个参数传递给它。 – 2010-11-19 15:01:38

我会使用建议你一个强类型的编辑器模板和放弃的ViewData:

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

,并在EditorTemplate:

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

UPDATE:

你之后”已经发布你的异常堆栈跟踪我发现了这个问题:

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

您需要将您的ViewData["EvaluationTypes"]转换为SelectList。这是说,那些丑陋的演员应该通过使用强类型助手来避免,正如我在我的初步答案中所建议的那样。

+0

hm,实际上做一个进入部分显示我的“System.Web.Mvc.SelectList”,是否表示数据正在传递给部分? – eka808 2010-11-19 14:57:27

+0

@ eka808,你是对的。我误解了你的代码。 – 2010-11-19 14:59:54

+0

那么,你有没有关于这个问题的想法? :-S – eka808 2010-11-19 15:12:16