如何将我的下拉列表选中项目保存到我的数据库中?

时间:2015-11-24 13:59:33

标签: c# model-view-controller drop-down-menu

我需要在用户注册期间在我的数据库中保存所选项目。但似乎我的选定项目无法识别。这是错误,它给了我

  

“没有'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>

3 个答案:

答案 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
}