C#MVC Dropdownlist没有ViewData项

时间:2016-10-11 13:35:33

标签: c# asp.net asp.net-mvc

我遇到了PartialView中的下拉列表问题。

基本上会收到以下错误 There is no ViewData item of type 'IEnumerable<SelectListItem>' that has the key 'Status'.

这是控制器内的ActionResult方法

[HttpGet]
public  ActionResult Status()
{
   List<SelectListItem> Status = new List<SelectListItem>();

   Status.Add(new SelectListItem { Text = "Open", Value = "1" });
   Status.Add(new SelectListItem { Text = "Closed", Value = "2" });
   Status.Add(new SelectListItem { Text = "Delete", Value = "3" });

   ViewData["Status"] = Status;

   return View();
}

我的Status部分视图,我在其中调用选择列表

@Html.DropDownList("Status", ViewData["Status"] as SelectList)

然后我从主视图中调用部分视图,如下所示

@Html.Partial("Status")

我只是不确定为什么会出现上述错误。我看了这个asp.net mvc dropdownlist no ViewData item,仍然无法纠正这个问题?

更新

根据@MikeDebela解决方案,我的状态行动项从未被调用过。因此使用以下语法直接调用Action

@{Html.RenderAction("Status");}

3 个答案:

答案 0 :(得分:3)

当您使用Partial帮助程序时,运行时会查找视图并呈现一个字符串(您的操作永远不会被执行)。另一方面,RenderAction执行操作并显示结果。所以,使用:

@{Html.RenderAction("Status");}

答案 1 :(得分:0)

@Html.DropDownList("Status", new SelectList((System.Collections.IEnumerable) ViewData["Status"],"Text","Value"))

您可以使用此行填充带有ViewData的下拉列表

答案 2 :(得分:0)

请检查代码如下,因为它正在与我合作

public ActionResult Index()
    {
        List<SelectListItem> Status = new List<SelectListItem>();

        Status.Add(new SelectListItem { Text = "Open", Value = "1" });
        Status.Add(new SelectListItem { Text = "Closed", Value = "2" });
        Status.Add(new SelectListItem { Text = "Delete", Value = "3" });

        ViewData["Status"] = Status;
        return View();
    }


@Html.DropDownList("Status", new SelectList((System.Collections.IEnumerable)ViewData["Status"], "Value", "Text"))

或者您可以使用

@Html.DropDownList("Status", (IEnumerable<SelectListItem>)ViewData["Status"])