Asp.net mvc 具有键“MaritalStatus”的ViewData项的类型为“System.String”,但必须为“IEnumerable”类型

Asp.net mvc 具有键“MaritalStatus”的ViewData项的类型为“System.String”,但必须为“IEnumerable”类型,asp.net-mvc,razor,Asp.net Mvc,Razor,我正在从内存中的数据填充DropDownList,并在POST中获得此错误 错误:具有键“MaritalStatus”的ViewData项的类型为“System.String”,但必须为“IEnumerable”类型 控制器:- // GET: /Application/Create public ActionResult Create() { List<SelectListItem> lst = new List<SelectListItem>(); l

我正在从内存中的数据填充DropDownList,并在POST中获得此错误

错误:具有键“MaritalStatus”的ViewData项的类型为“System.String”,但必须为“IEnumerable”类型

控制器:-

// GET: /Application/Create
public ActionResult Create()
{
    List<SelectListItem> lst = new List<SelectListItem>();
    lst.Add(new SelectListItem { Text = "Unmarried", Value = "1" });
    lst.Add(new SelectListItem { Text = "Married", Value = "2" });
    lst.Add(new SelectListItem { Text = "Widow", Value = "3" });
    ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");

    return View();
}

// POST: /Application/Create
[HttpPost]
public ActionResult Create(ApplicationForm applicationform)
{
    if (ModelState.IsValid)
    {
        db.ApplicationForms.Add(applicationform);
        db.SaveChanges();
        return RedirectToAction("Index");
    }

    return View(applicationform);
}

非常感谢您的帮助。

好吧,我通过在POST action中重新填充列表解决了这个问题,以下是完整的工作代码

    //
    // GET: /Application/Create

    public ActionResult Create()
    {
        List<SelectListItem> lst = new List<SelectListItem>();
        lst.Add(new SelectListItem { Text = "Unmarried", Value = "Unmarried" });
        lst.Add(new SelectListItem { Text = "Married", Value = "Married" });
        lst.Add(new SelectListItem { Text = "Widow", Value = "Widow" });
        ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");

        return View();
    }

    //
    // POST: /Application/Create

    [HttpPost]
    public ActionResult Create(ApplicationForm applicationform)
    {
        if (ModelState.IsValid)
        {
            db.ApplicationForms.Add(applicationform);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            List<SelectListItem> lst = new List<SelectListItem>();
            lst.Add(new SelectListItem { Text = "Unmarried", Value = "1" });
            lst.Add(new SelectListItem { Text = "Married", Value = "2" });
            lst.Add(new SelectListItem { Text = "Widow", Value = "3" });
            ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");
        }

        return View(applicationform);
    }

好吧,我通过在PostAction中重新填充列表解决了这个问题,下面是完整的工作代码

    //
    // GET: /Application/Create

    public ActionResult Create()
    {
        List<SelectListItem> lst = new List<SelectListItem>();
        lst.Add(new SelectListItem { Text = "Unmarried", Value = "Unmarried" });
        lst.Add(new SelectListItem { Text = "Married", Value = "Married" });
        lst.Add(new SelectListItem { Text = "Widow", Value = "Widow" });
        ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");

        return View();
    }

    //
    // POST: /Application/Create

    [HttpPost]
    public ActionResult Create(ApplicationForm applicationform)
    {
        if (ModelState.IsValid)
        {
            db.ApplicationForms.Add(applicationform);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            List<SelectListItem> lst = new List<SelectListItem>();
            lst.Add(new SelectListItem { Text = "Unmarried", Value = "1" });
            lst.Add(new SelectListItem { Text = "Married", Value = "2" });
            lst.Add(new SelectListItem { Text = "Widow", Value = "3" });
            ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");
        }

        return View(applicationform);
    }

@斯蒂芬,你怎么说这是重复的?这个问题是3年前提出来的,而你提到的原创问题是6个月前提出来的。这没什么区别。它为遇到这个问题的用户提供了一个备选答案,这是一个社区维基,并深入解释了问题的症结所在。将问题标记为重复问题的全部意义在于告诉每个人忽略它,以便他们能够更好地利用时间。这是一位专家在这里解释的。所以,从技术上讲,你应该将新问题标记为重复问题。你说它为遇到这个问题的用户提供了一个备选答案,这是一个社区wiki,并深入解释了问题所在。我看到右侧有一个相关的问题列表,我个人将此作为备选答案。如果我看到重复,我不重视这个问题。什么?这个网站上有数百个被标记为重复的重要问题。将你的问题标记为重复并不意味着这是一个糟糕的问题。@stephen你怎么说这是重复的?这个问题是3年前提出来的,而你提到的原创问题是6个月前提出来的。这没什么区别。它为遇到这个问题的用户提供了一个备选答案,这是一个社区维基,并深入解释了问题的症结所在。将问题标记为重复问题的全部意义在于告诉每个人忽略它,以便他们能够更好地利用时间。这是一位专家在这里解释的。所以,从技术上讲,你应该将新问题标记为重复问题。你说它为遇到这个问题的用户提供了一个备选答案,这是一个社区wiki,并深入解释了问题所在。我看到右侧有一个相关的问题列表,我个人将此作为备选答案。如果我看到重复,我不重视这个问题。什么?这个网站上有数百个被标记为重复的重要问题。将你的问题标记为重复问题并不意味着它是一个差劲的问题。
    //
    // GET: /Application/Create

    public ActionResult Create()
    {
        List<SelectListItem> lst = new List<SelectListItem>();
        lst.Add(new SelectListItem { Text = "Unmarried", Value = "Unmarried" });
        lst.Add(new SelectListItem { Text = "Married", Value = "Married" });
        lst.Add(new SelectListItem { Text = "Widow", Value = "Widow" });
        ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");

        return View();
    }

    //
    // POST: /Application/Create

    [HttpPost]
    public ActionResult Create(ApplicationForm applicationform)
    {
        if (ModelState.IsValid)
        {
            db.ApplicationForms.Add(applicationform);
            db.SaveChanges();
            return RedirectToAction("Index");
        }
        else
        {
            List<SelectListItem> lst = new List<SelectListItem>();
            lst.Add(new SelectListItem { Text = "Unmarried", Value = "1" });
            lst.Add(new SelectListItem { Text = "Married", Value = "2" });
            lst.Add(new SelectListItem { Text = "Widow", Value = "3" });
            ViewBag.MaritalStatus = new SelectList(lst, "Value", "Text");
        }

        return View(applicationform);
    }