Asp.net mvc 在渲染部分MVC中传递下拉列表
我在想也许我是在试图实现不可能的事情。我在页面上有一个按钮,显示用于向另一个模型添加项目的partialview。这有一个dropdownlist,在进一步调查后返回null,因此抛出一个错误:Asp.net mvc 在渲染部分MVC中传递下拉列表,asp.net-mvc,asp.net-mvc-4,drop-down-menu,modal-dialog,Asp.net Mvc,Asp.net Mvc 4,Drop Down Menu,Modal Dialog,我在想也许我是在试图实现不可能的事情。我在页面上有一个按钮,显示用于向另一个模型添加项目的partialview。这有一个dropdownlist,在进一步调查后返回null,因此抛出一个错误: System.InvalidOperationException: There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'ProjectId'. 应在模式弹出窗口中呈现的Rende
System.InvalidOperationException: There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'ProjectId'.
应在模式弹出窗口中呈现的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>
已使用FKs和虚拟属性建立模型。当我在/ProjectDocument/create处使用scafolded create视图时,下拉列表按预期填充。如果有任何帮助,我将不胜感激。在这些情况下,我喜欢使用静态方法。在你的控制器上
int userId = (int)MySqlWebSecurity.CurrentUserId;
ViewBag.ProjectId = new SelectList(db.ProjectDocuments.Where(a=>a.ProjectUserId=userId), "ProjectId", "ProjectTitle");
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
}
谢谢@Mohammadb Batineh TempData是我唯一的选择吗?我读到使用tempdata不好,所以你的下拉列表没有创建?在哪里使用ViewData?我没有使用ViewData,我使用的是ViewBag,但错误有点欺骗性。我认为,当编译器没有为ViewBag找到任何内容时,它默认为ViewData。从研究中可以看出,这是因为下拉列表的viewbag为null或为空。请检查本文“是”。它是指向控制器的路径。projectname.controllername.getdropdown类似的内容
@Html.DropDownList("ProjectId", PathToController.GetDropDown())