如何将我的下拉列表中选择的项目保存到我的数据库中
本文关键字:我的 项目 保存 数据库 选择 下拉列表 | 更新日期: 2023-09-27 18:24:11
在用户注册期间,我需要将所选项目保存在数据库中。但我选择的项目似乎没有被识别。这是给我的错误
"没有类型为'IEnumerable'的ViewData项拥有钥匙"Faculties"
我在MVC/C#编程方面仍然不熟练,请帮忙下面是我的代码;提前感谢!
我的数据模型
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>
在下拉列表中显示项目的方式不正确。您可以使用以下代码来显示从数据库中提取的项目:
@Html.DropDownList("Faculties", ViewBag.Faculties as IEnumerable<SelectListItem>,
"Select Faculty");
请注意,您的ViewBag.Faculties
应该被广播到Enumerable<SelectListItem>
。
要获得控制器中下拉列表的选定值,您可以使用以下方法:
var value = Request["Faculties"];
一旦获得了值,就可以将其保存在数据库中。
更新:
一个好的方法是将您的视图绑定到一个模型,我认为您已经这样做了,因为我可以看到您正在使用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
}
尝试更改此行:
ViewBag.Faculties = new SelectList(db.Faculties, "Id", "Name");
到以下
ViewData["Faculties"] = new SelectList(db.Faculties, "Id", "Name");
ViewBag和ViewData是两个独立的构造,不能互换使用。
只是您的财产和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 )