【发布时间】:2011-08-16 15:48:04
【问题描述】:
我有一个包含两个下拉列表的页面,根据这两个列表的选择,我想在按下提交按钮时使用一些数据填充文本区域。
我在调试时看到的行为是页面被渲染,我做出选择并按下提交。 DataAccess 返回正确的结果,View 返回,但有一个例外“没有具有键 'People' 的 'IEnumerable' 类型的 ViewData 项。
我可以看到我可以重新设置下拉列表,但感觉好像我处理不正确。在 MVC 3 中是否有另一种方法可以执行此类操作?
public ActionResult Test()
{
//People for dropdownlist 1
var db = peopleRepository.People;
var query = db.Select(c => new {c.Id, c.Name});
ViewBag.People = new SelectList(query.AsEnumerable(), "Id", "Name");
//Elements for dropdownlist 2
var list = new Dictionary<string, string> {{"1", "Name"}, {"2", "Address"}, {"3", "Zip"}};
ViewBag.Elements = new SelectList(list, "Key", "Value");
return View();
}
// This part is what I'm confused about.
[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Test(string people, string elements)
{
if (ModelState.IsValid)
{
// Output from persistent storage query
var da = new DatabaseAccess(people, elements);
ViewBag.Results = da.Execute();
}
return View();
}
查看:
@using (Html.BeginForm("Test", "Home", FormMethod.Post)){ @Html.DropDownList("People", (SelectList)ViewBag.People, "--Select One--") @Html.DropDownList("Elements", (SelectList)ViewBag.Elements, "--Select One--") @Html.TextArea("结果", (string)ViewBag.Results, 10, 120, "") }
【问题讨论】:
-
使用模型会更容易,请参阅此问题以获取示例:stackoverflow.com/questions/6959166/…
-
@Matthieu - 这很好,但我仍然不确定帖子部分。
标签: c# asp.net-mvc-3