我在这里提出错误是没有'ienumerable< selectlistitem>类型的viewdata项目dropdownlistfor [英] I am geting error here is no viewdata item of type 'ienumerable<selectlistitem> dropdownlistfor
问题描述
当我尝试从下拉列表中保存数据时,它显示以下错误: - 这里没有类型'ienumerable dropdownlistfor的视图数据项目
这里是,y控制器< br $>
when i am trying save the data from dropdownlist it shows following error:- here is no viewdata item of type 'ienumerable dropdownlistfor
here is ,y controller
[HttpGet]
public ActionResult register(tbl_state t)
{
eBusPassSystemEntities db = new eBusPassSystemEntities();
IEnumerable<SelectListItem> item = db.tbl_state.Select(C => new SelectListItem
{
Value = C.state_name,
Text = C.state_name
});
ViewBag.state = item;
return View();
}
[HttpPost]
public ActionResult Register(tbl_user u)
{
if (ModelState.IsValid)
{
using (eBusPassSystemEntities Db = new eBusPassSystemEntities())
{
Db.tbl_user.Add(u);
Db.SaveChanges();
}
ModelState.Clear();
ViewBag.message = "Hello" + u.name + " Your Account Has been Succesfully created.";
}
return View();
}
}
}
这是我的观点
here is my view
<div class="col-md-10">
@Html.DropDownListFor(Model => Model.state, (IEnumerable<SelectListItem>)ViewBag.state, "Select state", new { @class = "form-control" })
@Html.ValidationMessageFor(model => model.state, "", new { @class = "text-danger" })
</div>
我尝试了什么:
我正确得到我的下拉列表数据,我试过了但我无法保存数据,
基本上我试图从表中获取状态并希望在寄存器表中保存状态。
推荐答案
ViewBag
中的项目仅适用于单个请求。提交表单时,它由不同的操作处理。该操作返回相同的视图,但不会重新填充所需的ViewBag
项目。
简单方法是在HttpPost
操作中重新填充ViewBag
:
Items in theViewBag
are only present for a single request. When you submit the form, it's handled by a different action. That action is returning the same view, but is not re-populating the requiredViewBag
items.
The simple approach is to re-populate theViewBag
in yourHttpPost
action:
[HttpGet]
public ActionResult register(tbl_state t)
{
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
ViewBag.state = db.tbl_state.Select(C => new SelectListItem
{
Value = C.state_name,
Text = C.state_name
}).ToList();
}
return View();
}
[HttpPost]
public ActionResult Register(tbl_user u)
{
if (ModelState.IsValid)
{
using (eBusPassSystemEntities Db = new eBusPassSystemEntities())
{
Db.tbl_user.Add(u);
Db.SaveChanges();
}
ModelState.Clear();
ViewBag.message = "Hello" + u.name + " Your Account Has been Succesfully created.";
}
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
ViewBag.state = db.tbl_state.Select(C => new SelectListItem
{
Value = C.state_name,
Text = C.state_name
}).ToList();
}
return View();
}
您可以将人口移动到单独的方法以避免代码重复:
You could move the population to a separate method to avoid code duplication:
private void PopulateLookups(eBusPassSystemEntities db)
{
ViewBag.state = db.tbl_state.Select(C => new SelectListItem
{
Value = C.state_name,
Text = C.state_name
}).ToList();
}
[HttpGet]
public ActionResult register(tbl_state t)
{
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
PopulateLookups(db);
}
return View();
}
[HttpPost]
public ActionResult Register(tbl_user u)
{
if (ModelState.IsValid)
{
using (eBusPassSystemEntities Db = new eBusPassSystemEntities())
{
Db.tbl_user.Add(u);
Db.SaveChanges();
}
ModelState.Clear();
ViewBag.message = "Hello" + u.name + " Your Account Has been Succesfully created.";
}
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
PopulateLookups(db);
}
return View();
}
但通常,在执行插入/更新/删除操作后,您希望将用户重定向到其他操作。这样,如果他们点击浏览器的刷新按钮,它将不再尝试再次执行相同的操作。
But typically, after performing an insert/update/delete operation, you want to redirect the user to a different action. That way, if they hit the browser's "Refresh" button, it won't try to perform the same action again.
private void PopulateLookups(eBusPassSystemEntities db)
{
ViewBag.state = db.tbl_state.Select(C => new SelectListItem
{
Value = C.state_name,
Text = C.state_name
}).ToList();
}
[HttpGet]
public ActionResult register(tbl_state t)
{
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
PopulateLookups(db);
}
return View();
}
[HttpPost]
public ActionResult Register(tbl_user u)
{
if (!ModelState.IsValid)
{
using (eBusPassSystemEntities db = new eBusPassSystemEntities())
{
PopulateLookups(db);
}
return View();
}
using (eBusPassSystemEntities Db = new eBusPassSystemEntities())
{
Db.tbl_user.Add(u);
Db.SaveChanges();
}
TempData["message"] = "Hello" + u.name + " Your Account Has been Succesfully created.";
return RedirectToAction("Success");
}
[HttpGet]
public ActionResult Success()
{
ViewBag.message = TempData["message"];
return View();
}
这篇关于我在这里提出错误是没有'ienumerable< selectlistitem>类型的viewdata项目dropdownlistfor的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!