JBi*_*bbs 141 asp.net-mvc
我试图使用ASP.NET MVC 2从使用Linq-2-SQL映射的数据库填充下拉列表,并继续收到此错误.
我很困惑,因为我IEnumerable<SelectListItem>在第二行声明了一个类型的变量,但错误让我觉得情况并非如此.我觉得这应该很简单,但我很挣扎.任何帮助表示赞赏.
以下是我的控制器的有趣内容:
public ActionResult Create()
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View();
}
Run Code Online (Sandbox Code Playgroud)
以下是我观点的有趣内容:
<div class="editor-label">
<%: Html.LabelFor(model => model.basetype) %>
</div>
<div class="editor-field">
<%: Html.DropDownList("basetype") %>
<%: Html.ValidationMessageFor(model => model.basetype) %>
</div>
Run Code Online (Sandbox Code Playgroud)
这是提交表单时的POST操作
// POST: /Meals/Create
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
return View(meal);
}
}
else
{
return View(meal);
}
}
Run Code Online (Sandbox Code Playgroud)
谢谢.
Pet*_*eto 204
我有同样的问题,最后我得到了答案......
问题是在POST操作中,在提交表单后,ModelState无效,或者它在try/catch中捕获错误,因此返回View.但这次View没有ViewData["basetype"]正确设置.
你需要再次填充它,可能使用之前使用的相同代码,所以重复一遍:
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
Run Code Online (Sandbox Code Playgroud)
之前return View(meal)在[HttpPost]方法.
这将解决您的问题:
[HttpPost]
public ActionResult Create(Meal meal)
{
if (ModelState.IsValid)
{
try
{
// TODO: Add insert logic here
var db = new DB();
db.Meals.InsertOnSubmit(meal);
db.SubmitChanges();
return RedirectToAction("Index");
}
catch
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
else
{
var db = new DB();
IEnumerable<SelectListItem> basetypes = db.Basetypes.Select(
b => new SelectListItem { Value = b.basetype, Text = b.basetype });
ViewData["basetype"] = basetypes;
return View(meal);
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这个问题已经很老了,但是今天我带着同样的问题来到这里,所以其他人可能会来这里...
Ben*_*Ben 86
如果SelectList为null,您将收到此错误.
| 归档时间: |
|
| 查看次数: |
94590 次 |
| 最近记录: |