代码之家  ›  专栏  ›  技术社区  ›  eka808

将DropDownList填充到ascx控件中

  •  0
  • eka808  · 技术社区  · 14 年前

    我想把一个下拉列表填充到一个ascx中。 为此,在控制器中,我使用LINQ查询并将结果填充到视图模型中。 从视图中生成下拉列表可以,但不是从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 回复  |  直到 14 年前
        1
  •  3
  •   Darin Dimitrov    14 年前

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

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

    在编辑模板中:

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

    更新:

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

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

    你需要铸造到 SelectList 你的 ViewData["EvaluationTypes"] . 正如我在最初的回答中建议的那样,应该使用强类型的助手来避免这些丑陋的角色扮演。