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表得到更新。我不希望新的派对被添加到派对表!!

希望你明白我的意思。已经被困在这个几天了,任何帮助都非常感谢,谢谢!

编辑:如果有更好的解决办法,请说出来:)

ASP.. NET MVC实体框架使用MultiSelectList插入到多对多表

这段代码看起来不对:

 foreach (var pId "PartyId")

它甚至不能编译。可能有

foreach (var pId in "PartyId")

此代码遍历"PartyId"字符串中的字符。正好有7个

一旦您从列表框中选择了PartyId,视图将只发送此id给post方法。在这种情况下,for循环变得毫无用处。您的大多数问题都来自于数据库中的多对多关系。点击这里了解更多。如果您想在一个Poll中有多个当事方,则创建1到*(或*到1)的关系,您会发现这是一种更简单的方法。