ASP.. NET MVC实体框架使用MultiSelectList插入到多对多表
本文关键字:插入 MultiSelectList MVC NET 实体 框架 ASP | 更新日期: 2023-09-27 18:04:28
我有3个表:
调查:
public int PollId { get; set; }
public string PollTitle { get; set; }
public virtual ICollection<Party> Parties { get; set; }
方
public int PartyId { get; set; }
public string PartyName { get; set; }
public virtual ICollection<Poll> Polls { get; set; }
PartiesInPoll(两个主键)
* int PartyId
* int PollId
In my PollController:
private VoterEntities db = new VoterEntities();
//
// GET: /Polls/Create
public ActionResult Create()
{
ViewBag.PartyId = new MultiSelectList(db.Parties, "PartyId", "PartyName");
return View();
}
//
// POST: /Polls/Create
[HttpPost]
public ActionResult Create(Poll poll)
{
//var parti = db.Parties.Find(partyId);
if (ModelState.IsValid)
{
var pList = new List<Party>();
foreach (var pId in "PartyId")
{
pList.Add(new Party
{
PartyId = pId
});
}
poll.Parties = pList;
db.Polls.Add(poll);
db.SaveChanges();
return RedirectToAction("Index");
}
ViewBag.PartyId = new MultiSelectList(db.Parties, "PartyId", "PartyName", poll.Parties);
return View(poll);
}
我的观点:
@model VoterMVC.Models.Poll
@using (Html.BeginForm())
{
@Html.ValidationSummary(true)
<div class="editor-label">
@Html.LabelFor(model => model.PollTitle)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.PollTitle)
@Html.ValidationMessageFor(model => model.PollTitle)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.Parties)
</div>
<div class="editor-field">
@Html.ListBox("PartyId")
@Html.ValidationMessageFor(model => model.Parties)
</div>
<p>
<input type="submit" value="Create" />
</p>
}
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
现在大部分工作都很顺利,但是foreach循环没有。它不会与所选政党的ListBox视图通信,并且循环向Party表和PartiesInPoll表添加7(?!)个新行。所以我想要的当然是让从视图的ListBox中选择的值,通过foreach循环发送,这样PartiesInPoll表得到更新。我不希望新的派对被添加到派对表!!
希望你明白我的意思。已经被困在这个几天了,任何帮助都非常感谢,谢谢!
编辑:如果有更好的解决办法,请说出来:)
这段代码看起来不对:
foreach (var pId "PartyId")
它甚至不能编译。可能有
foreach (var pId in "PartyId")
此代码遍历"PartyId"字符串中的字符。正好有7个
一旦您从列表框中选择了PartyId
,视图将只发送此id给post方法。在这种情况下,for循环变得毫无用处。您的大多数问题都来自于数据库中的多对多关系。点击这里了解更多。如果您想在一个Poll中有多个当事方,则创建1到*(或*到1)的关系,您会发现这是一种更简单的方法。