我想知道也许我正在努力实现不可能的事情。我在页面上有一个按钮,显示用于将项目添加到另一个模型的部分视图。这有一个下拉列表,在进一步调查时返回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创建视图时,将按预期填充下拉列表。我将不胜感激任何帮助。
答案 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())