【发布时间】:2016-05-29 15:00:02
【问题描述】:
我在 MVC 中遇到 DropDownList 问题, 我可以在 HTTPGET 上填充下拉列表,即数据输入页面显示下拉列表,其中包含来自数据表的正确数据,但是只要我按下提交按钮,MVC 就会将我带到 DropDownList 的查看器行,并出现错误“没有 ViewData 类型的项目”具有键 'Suburb' 的 IEnumerable'"
我的模特是
public class ServiceEntryRegister
{
public List<ReceiptHeader> HEADER { get; set; }
public List<ReceiptDetail> DETAIL { get; set; }
public ReceiptHeader SingleHEADER { get; set; }
public ReceiptDetail SingleDETAIL { get; set; }
}
控制器
[HttpGet]
public ActionResult CreateNew()
{
ServiceEntryRegister Model = new ServiceEntryRegister();
ViewBag.Btype = new SelectList(_er.BodyTypes, "Bodytypeid", "btype");
ViewBag.Engine = new SelectList(_er.EngineTypes, "Enginetypeid", "Engine");
ViewBag.Suburb = new SelectList(_er.Suburbs, "SuburbID", "SuburbName");
ViewBag.VehicleMake = new SelectList(_er.VehicleMakes, "VehicleMakeID", "Make");
return View();
}
[HttpPost]
// [ValidateAntiForgeryToken]
public ActionResult CreateNew(ServiceEntryRegister RH)
{
if (ModelState.IsValid)
{
CreateBagForLists();
RH.SingleHEADER.ReceiptID = _HC.PrimaryKeyGenerater();
_er.ReceiptHeaders.Add(RH.SingleHEADER);
_er.SaveChanges();
return View();
}
else
{
return View();
}
}
视图是:
<td>@Html.DropDownList("Suburb", String.Empty)</td>
我也试过了:
<td>@Html.DropDownList("Suburb", ViewBag.Suburb as SelectList)</td>
但一切都是徒劳的。
【问题讨论】:
-
因为当您 POST 时,
ModelState无效并且您返回视图但尚未为SelectList重新分配ViewBag属性(请参阅骗子了解处理此问题的正确方法- 您的信息略有不同,因为DropDownList()而不是DropDownListFor()的使用很糟糕)