使用ViewData将数据从控制器传递到视图

时间:2018-08-27 10:49:38

标签: asp.net-mvc-5 viewdata

我有一个控制器和一个视图,我想填充一个下拉列表。

我的控制器如下:

namespace AAA.Controllers
{
    public class BBBController: Controller
    {
        [HttpPost]
        public ActionResult Sort_Order()
        {
            List<SelectListItem> liSort = new List<SelectListItem>();
            liSort.Add(new SelectListItem() { Text = "--Select--", Value = "0", Selected = true });
            liSort.Add(new SelectListItem() { Text = "ASC", Value = "1" });
            liSort.Add(new SelectListItem() { Text = "DESC", Value = "2" });

            ViewData["ddSort"] = liSort;
            return View();
        }
    }
}

我的视图如下:

@model IEnumerable<AAA.Models.xyz>

@{
    ViewBag.Title = "List";
}

<br />
<h2>List</h2>

<table class="table">
    <tr>
        <th>
            Sort order
        </th>
    </tr>
    <tr>
        <td>
            @using (Html.BeginForm("Sort_Order", "BBB", FormMethod.Post))
            {
               @Html.DropDownList("Sort", ViewData["ddSort"] as IEnumerable<SelectListItem>, new { @class = "form-control", @style = "width:200px; height:30px" })
            }
        </td>
            </tr>
</table>

运行此命令时出现错误:

  

没有类型为“ IEnumerable ”的ViewData项目具有键“ Sort”。*

有人可以帮助我,告诉我我做错了什么吗?

1 个答案:

答案 0 :(得分:0)

您需要在GET方法中初始化ViewData["ddSort"]。然后,您可以在视图中使用它。

    [HttpGet]
    public ActionResult Sort_Order()
    {
        List<SelectListItem> liSort = new List<SelectListItem>();
        liSort.Add(new SelectListItem() { Text = "--Select--", Value = "0", Selected = true });
        liSort.Add(new SelectListItem() { Text = "ASC", Value = "1" });
        liSort.Add(new SelectListItem() { Text = "DESC", Value = "2" });

        ViewData["ddSort"] = liSort;
        return View();
    }