[英]ASP.NET MVC4 @Html.ListBoxFor Multiple to DB using EF
嗨,我还是MVC4的新手,我想使用HTML帮助器创建一个选择框,该框允许用户使用CTRL单击选择多个项目并使用EF存储结果。 这是我的看法
@model AtomicQuestionnaire.Models.Questionnaire
@{
ViewBag.Title = "Create";
}
@{
var ListInterest = new List<SelectListItem>()
{
new SelectListItem(){Value="Stamp Collecting",Text="Stamp Collecting"},
new SelectListItem(){Value="Listening to Music",Text="Listening to Music"},
new SelectListItem(){Value="Reading",Text="Reading"}
};
}
<h2>Create</h2>
@using (Html.BeginForm()) {
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<div class="editor-label">
@Html.LabelFor(model => model.Interest)
</div>
<div class="editor-field">
@Html.ListBoxFor(model => model.Interest, ListInterest, new { size = "15", Multiple = "multiple" })
@Html.ValidationMessageFor(model => model.Interest)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
这是我的模特
public class Questionnaire
{
public int ID { get; set; }
public string Name { get; set; }
public string City { get; set; }
public string VisitorDesc { get; set; }
public string Interest { get; set; }
public int SiteRating { get; set; }
}
和我创建动作的控制器
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Questionnaire questionnaire)
{
if (ModelState.IsValid)
{
db.Questionnaires.Add(questionnaire);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(questionnaire);
}
我只能将html选择框的第一项存储到数据库中。 你能告诉我我做错了什么吗? 我想将所有选定的项目存储到数据库中。 谢谢
由于要选择多个列表框值,因此必须将模型的属性定义为
public virtual ICollection<Interest> Interests { get; set; }
public virtual ICollection<Interest> Interests { get; set; }
,
不像
public string Interest { get; set; }
如果Interests
属性是集合,则将需要一个单独的表来存储它们(EF级别的单独实体)。
public class Interest
{
public int ID { get; set; }
public string Title { get; set; }
public virtual ICollection<Questionnaire> Questionnaires { get; set; }
}
EF将Interests
实体生成Interests
表和联结表,以存储问卷-兴趣关联。
风景:
@{
var ListInterest = new List<SelectListItem>() //hard-code, better load interests from db
{
new SelectListItem(){ Value = 1, Text="Stamp Collecting" },
new SelectListItem(){ Value=2, Text="Listening to Music" },
new SelectListItem(){ Value=3, Text="Reading"}
};
Html.ListBoxFor(c => c.Interests,
new MultiSelectList(ListInteres, "Value", "Text"))
注意,兴趣实体必须存在于db中(否则SaveChanges
将引发异常)。 您可以暂时手动添加它们,也可以编写单独的添加/编辑页面。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.