【问题标题】:Fill a DropDownList into an ASCX control将 DropDownList 填充到 ASCX 控件中
【发布时间】:2010-11-19 14:47:43
【问题描述】:

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

【问题讨论】:

  • 在视图中您使用 Model.evaluationTypes,但在 ASCX 中您使用 ViewData["EvaluationTypes"]。是否填写了 ViewData["EvaluationTypes"]?
  • @Pavel,是的,他将其作为EditorFor 助手的第二个参数传递。

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


【解决方案1】:

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

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

在 EditorTemplate 中:

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

更新:

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

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

您需要将您的ViewData["EvaluationTypes"] 转换为SelectList。话虽这么说,应该通过使用我在最初回答中建议的强类型助手来避免那些丑陋的演员表。

【讨论】:

  • hm,实际上做了一个 到部分显示我“System.Web.Mvc.SelectList”,是表明数据正在被传递给部分?
  • 那么,你知道这个问题吗? :-S
  • 不,我无法重现该错误。这个对我有用。您是否遇到异常或只是列表未填充任何值?
  • 编译错误说明:在编译服务此请求所需的资源时出错。请查看以下特定错误详细信息并适当修改您的源代码。编译器错误消息:CS1928:“System.Web.Mvc.HtmlHelper”不包含“DropDownList”的定义和最佳扩展方法重载“System.Web.Mvc.Html.SelectExtensions.DropDownList( System.Web.Mvc.HtmlHelper, string, string)' 有一些无效参数
  • 好的,知道了,看看我的更新,下次总是在你的问题中包含异常消息。它使问题很容易被发现。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2011-04-27
  • 1970-01-01
  • 1970-01-01
  • 2023-03-19
相关资源
最近更新 更多