在RenderPartial MVC中传递下拉列表

时间:2014-05-04 13:28:42

标签: asp.net-mvc asp.net-mvc-4 drop-down-menu modal-dialog

我想知道也许我正在努力实现不可能的事情。我在页面上有一个按钮,显示用于将项目添加到另一个模型的部分视图。这有一个下拉列表,在进一步调查时返回null并因此引发错误:

System.InvalidOperationException: There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'ProjectId'.

我在控制器中使用ViewBag.ProjectId

int userId = (int)MySqlWebSecurity.CurrentUserId;
 ViewBag.ProjectId = new SelectList(db.ProjectDocuments.Where(a=>a.ProjectUserId=userId), "ProjectId", "ProjectTitle");

RenderPartial应该以模态弹出窗口

呈现
@{Html.RenderPartial("_AddProjectDocument", new ProjectUno.Models.ProjectDocument());}
_AddProjectDocument.cshtml中的

<div class="editor-field">
        @Html.DropDownList("ProjectId", String.Empty)
        @Html.ValidationMessageFor(model => model.ProjectId)
    </div>

已使用FK和虚拟属性设置模型。当我在/ ProjectDocument / Create使用scafolded创建视图时,将按预期填充下拉列表。我将不胜感激任何帮助。

1 个答案:

答案 0 :(得分:0)

我喜欢在这些情况下使用静态方法。在你的控制器上

public static List<SelectListItem> GetDropDown(){
    List<SelectListItem> ls = new List<SelectListItem>();
    var data = //call the database;
    foreach(var temp in data){
        ls.Add(new SelectListItem() { Text = temp.Text, Value = temp.Value });
    }
    return ls
}

然后在你的观点上

@Html.DropDownList("ProjectId", PathToController.GetDropDown())