Asp.net mvc 5 使用viewdata将数据从控制器传递到视图

Asp.net mvc 5 使用viewdata将数据从控制器传递到视图,asp.net-mvc-5,viewdata,Asp.net Mvc 5,Viewdata,我有一个控制器和一个视图,我想填充一个dropdownlist 我的控制器如下所示: namespace AAA.Controllers { public class BBBController: Controller { [HttpPost] public ActionResult Sort_Order() { List<SelectListItem> liSort = new List<

我有一个控制器和一个视图,我想填充一个dropdownlist

我的控制器如下所示:

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>
namespace AAA.Controllers
{
公共类BBB控制器:控制器
{
[HttpPost]
公共行动结果排序顺序()
{
List liSort=新列表();
添加(新建SelectListItem(){Text=“--Select--”,Value=“0”,Selected=true});
添加(新的SelectListItem(){Text=“ASC”,Value=“1”});
添加(新的SelectListItem(){Text=“DESC”,Value=“2”});
ViewData[“ddSort”]=liSort;
返回视图();
}
}
}
我的观点是这样的:

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>
@model IEnumerable
@{
ViewBag.Title=“列表”;
}

列表 排序顺序 @使用(Html.BeginForm(“Sort_Order”,“BBB”,FormMethod.Post)) { @DropDownList(“Sort”,ViewData[“ddSort”]作为IEnumerable,新的{@class=“form control”,@style=“width:200px;height:30px”}) }
当我运行此命令时,我得到一个错误:

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


有人能帮助我并告诉我我做错了什么吗?

您需要在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();
    }
[HttpGet]
公共行动结果排序顺序()
{
List liSort=新列表();
添加(新建SelectListItem(){Text=“--Select--”,Value=“0”,Selected=true});
添加(新的SelectListItem(){Text=“ASC”,Value=“1”});
添加(新的SelectListItem(){Text=“DESC”,Value=“2”});
ViewData[“ddSort”]=liSort;
返回视图();
}

可能的重复项您是否也在GET方法中填充了
ViewData[“ddSort”]
?我对这一点很陌生,所以您能否通过“在GET方法中是否也填充了ViewData[“ddSort”]”来解释您的操作?您所显示的只是
[HttpPost]
方法-您需要在
[HttpGet]
方法中使用相同的代码(即设置
ViewData[“ddSort”]=liSort;
)好的,我不明白。我按你说的做了(我希望如此),但仍然不起作用。你是否可以编写代码,以便我进行比较?谢谢。