我使用数据库中的值创建了一个Dropdownlist,它在单独的View中非常有用。但是,当我尝试在Partial View中显示我的Dropdownlist时,它不起作用,我得到异常:“没有类型为'IEnumerable'的ViewData项具有密钥'Id'”
这是我的代码:
//it's my Model
namespace TC.Models
{
public class TypesQuestionBL
{
public System.Guid Id { get; set; }
public string Name { get; set; }
public IEnumerable<SelectListItem> Types { get; set; }
}
}
//it's my Controller
namespace TC.Controllers
{
public class DropDownController : Controller
{
ExaminationsEntities db = new ExaminationsEntities();
public ActionResult Index()
{
SelectList typelist = new SelectList(db.TypesQuestions.ToList(), "Id", "Name");
ViewData["Types"] = typelist;
return View();
}
protected override void Dispose(bool disposing)
{
db.Dispose();
base.Dispose(disposing);
}
}
}
//it's my Partial View
@model TC.Models.TypesQuestionBL
@Html.DropDownList("Id", (IEnumerable<SelectListItem>) ViewData["Types"])
//it's my View
@Html.Partial("~/Views/DropDown/Index.cshtml")
答案 0 :(得分:0)
<强>更新强>
仔细观察,您似乎正在尝试使用“索引”视图渲染局部视图。您正在尝试重新渲染当前显示为部分视图的相同视图,这可能是导致问题的原因。视图中的行需要从@ Html.Partial(&#34;〜/ Views / DropDown / Index.cshtml&#34;)更改为@ Html.Partial(&#34;〜/ Views / DropDown / _MyDropDownListPartialViewNameHere.cshtml& #34)。你确实创建了一个单独的局部视图吗?你也可以发布文件名吗?
您应将ViewData["Types"]
设置为SelectList
对象,而应将其设置为IEnumerable<SelectListItem>
对象。
您的索引操作应如下所示:
public ActionResult Index()
{
var typelist = db.TypesQuestions.Select(x => new SelectListItem
{
Text = x.Name,
Value = x.Id.ToString()
}).ToList();
ViewData["Types"] = typelist;
return View();
}