为什么我的Dropdownlist在MVC的Partial View中不起作用?

时间:2014-06-09 18:40:21

标签: c# asp.net-mvc drop-down-menu

我使用数据库中的值创建了一个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")

1 个答案:

答案 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();
}