我是asp.net MVC的新手,希望有人可以提供帮助。 我尝试将创建表单的类别字段更改为dorpdownlist。 下拉列表中的项目来自表格 - Catagory
一切似乎都很好,但是当我提交创建时,我收到了错误消息
具有键'category'的ViewData项的类型为'System.String',但必须是'IEnumerable< SelectListItem>'的类型
这是我的控制器代码:
public ActionResult Create()
{
IEnumerable<SelectListItem> items = db.Catagorys
.Select(c => new SelectListItem
{
Text = c.CatagoryName
});
ViewBag.Searchcategory = items;
return View();
}
//
// POST: /Admin/Create
[HttpPost]
public ActionResult Create(Contact contact)
{
try
{
if (ModelState.IsValid)
{
db.Contacts.Add(contact);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError("", "Unable to save changes, Try again.");
}
return View(contact);
}
这是我的创建视图代码:
<div class="editor-field">
@Html.DropDownListFor(model => model.category, (IEnumerable<SelectListItem>)ViewBag.Searchcategory, "--Select One--")
@Html.ValidationMessageFor(model => model.category)
</div>
答案 0 :(得分:1)
在帖子中,如果ModelState无效,则返回视图。但是你只在get请求中填写类别选择列表,你也应该在post中
[HttpPost]
public ActionResult Create(Contact contact)
{
try
{
if (ModelState.IsValid)
{
db.Contacts.Add(contact);
db.SaveChanges();
return RedirectToAction("Index");
}
}
catch (DataException)
{
//Log the error (add a variable name after DataException)
ModelState.AddModelError("", "Unable to save changes, Try again.");
}
IEnumerable<SelectListItem> items = db.Catagorys
.Select(c => new SelectListItem
{
Text = c.CatagoryName
});
return View(contact);
}
当然,如果您使用selectlist属性创建CreateContactViewModel
类,那将会很棒。并摆脱使用ViewBag