代码之家  ›  专栏  ›  技术社区  ›  Sergio Tapia

帮助我创建数据库中所有犹太人的下拉列表!

  •  0
  • Sergio Tapia  · 技术社区  · 14 年前

    我有以下表格结构:

    当编辑一个区域时,我正在尝试填充所有犹太人的组合框。这意味着我可以更改负责某个区域的人。

    这是我的区域控制器.cs代码:

    public actionresult edit(int id)
    {
    area area=arearerepository.getarea(id);
    jeferepository jefe=新jeferepository();
    viewdata[“jefes”]=新的选择列表(jefe.findalljefes(),“nombre”,“nombre”);
    回视图(面积);
    }
    
    [接受动词(httpverbs.post)]
    公共操作结果编辑(int id,FormCollection FormValues)
    {
    area area=arearerepository.getarea(id);
    
    尝试
    {
    更新模型(面积);
    areRepository.save();
    
    返回RedirectToAction(“详细信息”,new id=area.id);
    
    }
    catch(异常)
    {
    foreach(area.getruleviolations()中的var问题)
    {
    modelstate.addmodelerror(issue.propertyname,issue.errormessage);
    }
    回视图(面积);
    }
    }
    < /代码> 
    
    

    请注意,.findalljefes()返回iQueryable<>集合。

    现在,在edit.aspx文件中,我有以下内容:

    <fieldset>
    <Legend>Information Detalada de Area<%:model.nombre%></Legend>
    
    <div class=“editor label”>
    <%:html.labelfor(model=>model.nombre)%>
    &L/DIV & GT;
    <div class=“editor field”>
    <%:html.textbox用于(model=>model.nombre)%>
    <%:html.validationmessagefor(model=>model.nombre)%>
    &L/DIV & GT;
    
    <div class=“editor label”>
    <%:html.labelfor(model=>model.idjefe)%>
    &L/DIV & GT;
    <div class=“editor field”>
    <%:html.dropdownlist(“idjefe”,(selectlist)viewdata[“jefes”],(select jefe)“)%>
    <%:html.validationmessagefor(model=>model.idjefe)%>
    &L/DIV & GT;
    
    & P & GT;
    <input type=“submit”value=“保存”/>
    & lt;/p & gt;
    </fieldset>
    < /代码> 
    
    

    我收到此错误:

    < Buff行情>

    没有类型为的ViewData项 具有的“IEnumerable” 钥匙“idjefe”。

    < /块引用

    在编辑一个区域时,我试图填充所有犹太人的组合框。意思是我可以改变谁负责一个地区。

    这是我的areacontroller.cs代码:

    public ActionResult Edit(int id)
            {
                Area area = areaRepository.GetArea(id);
                JefeRepository jefe = new JefeRepository();           
                ViewData["Jefes"] = new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre");
                return View(area);
            }
    
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult Edit(int id, FormCollection formValues)
            {
                Area area = areaRepository.GetArea(id);
    
                try
                {
                    UpdateModel(area);
                    areaRepository.Save();
    
                    return RedirectToAction("Details", new { id = area.ID });
    
                }
                catch (Exception)
                {
                    foreach (var issue in area.GetRuleViolations())
                    {
                        ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage);
                    }
                    return View(area);
                }
            }
    

    请注意,.findalljefes()返回一个IQueryable<>集合。

    现在,在edit.aspx文件中,我有以下内容:

    <fieldset>
                <legend>Informacion Detallada de Area | <%: Model.Nombre %></legend>
    
                <div class="editor-label">
                    <%: Html.LabelFor(model => model.Nombre) %>
                </div>
                <div class="editor-field">
                    <%: Html.TextBoxFor(model => model.Nombre) %>
                    <%: Html.ValidationMessageFor(model => model.Nombre) %>
                </div>
    
                <div class="editor-label">
                    <%: Html.LabelFor(model => model.IDJefe) %>
                </div>
                <div class="editor-field">
                    <%: Html.DropDownList("IDJefe", (SelectList)ViewData["Jefes"], "(Select Jefe)") %>                
                    <%: Html.ValidationMessageFor(model => model.IDJefe) %>
                </div>
    
                <p>
                    <input type="submit" value="Save" />
                </p>
            </fieldset>
    

    我收到此错误:

    没有类型为的ViewData项 “IEnumerable”具有 “idjefe”键。

    2 回复  |  直到 14 年前
        1
  •  0
  •   Ahmad    14 年前

    MSDN :

    new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre");
    

    jefe.FindAllJefes() 传递到SelectList ctor时应为IEnumerable。你的论点应该读 jefe.FindAllJefes().ToList()

        2
  •  0
  •   dave    14 年前

    在不了解自定义类的设计方式的情况下,这是一个困难的问题,但只是为了冒险猜测:

    ViewData["Jefes"] = new SelectList(jefe.FindAllJefes(), "Nombre", "Nombre")
    

    我不知道您的selectlist类是如何设置的,但是(可能)您使用“nombre”作为ID和显示值(???).

    因此,您的选择列表正在查找一个名为“idjefe”的键,而没有找到它,因为您使用了两次“nombre”。

        <div class="editor-field">
            <%: Html.DropDownList("IDJefe", (SelectList)ViewData["Jefes"], "(Select Jefe)") %>                
            <%: Html.ValidationMessageFor(model => model.IDJefe) %>
        </div>