C# 将DropDownList填充到ASCX控件中

C# 将DropDownList填充到ASCX控件中,c#,asp.net-mvc-2,drop-down-menu,viewmodel,viewdata,C#,Asp.net Mvc 2,Drop Down Menu,Viewmodel,Viewdata,我想在ASCX中填写dropdownlist。 为此,我在控制器中使用LINQ查询并将结果填充到viewModel中。 从视图中生成下拉列表是可以的,但从ASCX中不可以! 你知道为什么这样不行吗 提前感谢:-) 控制器中的代码 var query = from foo in session.Linq<PROJECT.Models.bar>() select foo; PROJECT.ViewModels.myviewmodel viewModel = new PROJECT.Vie

我想在ASCX中填写dropdownlist。 为此,我在控制器中使用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);
var query=from foo in session.Linq()选择foo;
PROJECT.ViewModels.myviewmodel viewModel=新建项目.ViewModels.myviewmodel();
viewModel.data=新建选择列表(查询“Id”、“标题”);
返回视图(viewModel);
视图中的代码

<h2>Create</h2>
<%= Html.EditorFor(a => a.evaluation, new { EvaluationTypes = Model.evaluationTypes })%>            
<!-- Generate from here is ok -->
<%: Html.DropDownList("foo",Model.evaluationTypes) %>
创建
a、 评估,新{EvaluationTypes=Model.EvaluationTypes})%>
ASCX中的代码

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

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

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

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

更新:

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

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


您需要强制转换到
SelectList
您的
ViewData[“EvaluationTypes”]
。也就是说,应该像我在最初的回答中建议的那样,通过使用强类型帮助程序来避免这些丑陋的强制转换。

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

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

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

更新:

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

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


您需要强制转换到
SelectList
您的
ViewData[“EvaluationTypes”]
。也就是说,应该像我在最初的回答中建议的那样,通过使用强类型助手来避免这些难看的强制转换。

在视图中,您使用Model.evaluationTypes,但在ASCX中,您使用ViewData[“evaluationTypes”]。您是否填写了ViewData[“EvaluationTypes”]?@Pavel,是的,他正在将其作为
EditorFor
helper的第二个参数传递。在视图中,您使用Model.EvaluationTypes,但在ASCX中,您使用ViewData[“EvaluationTypes”]。您是否填写了ViewData[“EvaluationTypes”]?@Pavel,是的,他正在将其作为
EditorFor
helper.hm的第二个参数传递,事实上,在部分显示“System.Web.Mvc.SelectList”中做了一个输入,这是否表明数据正在传递给部分?那么,您知道这个问题吗-SNo,我无法重现错误。它对我有用。您是否遇到异常,或者列表中没有填充任何值?编译错误描述:在编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息,并适当修改源代码。编译器错误消息:CS1928:“System.Web.Mvc.HtmlHelper”不包含“DropDownList”的定义和“System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,string,string)”的最佳扩展方法重载“System.Web.Mvc.HtmlHelper,string)”包含一些无效参数OK,Get,it,查看我的更新,下次在问题中始终包含异常消息。这使得问题很容易被发现。嗯,事实上,对部分显示“System.Web.Mvc.SelectList”进行一次检查,这是否表明数据正在传递给部分?那么,你知道这个问题吗-SNo,我无法重现错误。它对我有用。您是否遇到异常,或者列表中没有填充任何值?编译错误描述:在编译服务此请求所需的资源时发生错误。请查看以下特定错误详细信息,并适当修改源代码。编译器错误消息:CS1928:“System.Web.Mvc.HtmlHelper”不包含“DropDownList”的定义和“System.Web.Mvc.Html.SelectExtensions.DropDownList(System.Web.Mvc.HtmlHelper,string,string)”的最佳扩展方法重载“System.Web.Mvc.HtmlHelper,string)”包含一些无效参数OK,Get,it,查看我的更新,下次在问题中始终包含异常消息。这使得问题很容易被发现。