我需要在用户注册期间在我的数据库中保存所选项目。但似乎我的选定项目无法识别。这是错误,它给了我
“没有'IEnumerable'类型的ViewData项 有关键的'Faculties
我仍然不熟练使用MVC / C#编程,请帮助以下是我的代码;提前谢谢!
我的DataModel
public string Faculty { get; set; }
我的控制器
public ActionResult Register()
{
DataClasses1DataContext db = new DataClasses1DataContext();
ViewBag.Faculties = new SelectList(db.Faculties, "Id", "Name");
return View();
}
我的观点
<div class="form-group">
@Html.LabelFor(model => model.Faculty, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.DropDownList("Faculties","Select Faculty")
@Html.ValidationMessageFor(model => model.Faculty, "", new { @class = "text-danger" })
</div>
</div>
答案 0 :(得分:1)
尝试更改此行:
ViewBag.Faculties = new SelectList(db.Faculties, "Id", "Name");
以下
ViewData["Faculties"] = new SelectList(db.Faculties, "Id", "Name");
ViewBag和ViewData是两个独立的结构,不能互换使用。
答案 1 :(得分:1)
它只是您的财产的名称,而您的ViewBag
是不同的。更改您的ViewBag
名称以匹配媒体资源名称。
ViewBag.Faculty = new SelectList(db.Faculties, "Id", "Name");
您的HTML将是:
@Html.DropDownList("Faculty ","Select Faculty")
或者(最好)使用模型绑定而不是ViewBag
<强>模型强>
public string Faculty { get; set; }
public IList<SelectListItem> Faculties {get;set;}
<强>控制器强>
Model.Faculties = new SelectList(db.Faculties, "Id", "Name");
return View(Model);
HTML(查看)
@Html.DropDownListFor(m => m.Faculty , Model.Faculties )
答案 2 :(得分:1)
您在下拉列表中显示项目的方式不正确。您可以使用以下代码显示从db中获取的项目:
@Html.DropDownList("Faculties", ViewBag.Faculties as IEnumerable<SelectListItem>,
"Select Faculty");
请注意,您的ViewBag.Faculties
应该投放到Enumerable<SelectListItem>
。
要获取控制器中下拉列表的选定值,您可以使用以下方法:
var value = Request["Faculties"];
获得该值后,您可以将其保存在数据库中。
<强>更新强>
一个好的方法是将View绑定到我认为你已经完成的模型,因为我可以看到你正在使用model.Faculty
。因此,下拉列表应如下所示:
@Html.DropDownList(model => model.Faculty,ViewBag.Faculties as IEnumerable<SelectListItem>,
"Select Faculty");
发布数据的控制器应如下所示:
[HttpPost]
public ActionResult Register(YourModel model)
{
var selectedFaculty = model.Faculty; //Selected Value
//Save it in database
}