繁体   English   中英

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

[英]ASP.NET MVC Entity Framework insert to many-to-many table using MultiSelectList

我有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; }

partysInPoll (两个主键)

 * int PartyId
 * int PollId

在我的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通信,并且循环将7(?!)新行添加到“方”表和“ PartiesInPoll”表中。 因此,我想要的当然是让通过视图从ListBox中选择的值通过foreach循环发送,以便PartiesInPoll表得到更新。 我不想将新的聚会添加到聚会表中!!

希望你明白我的意思。 在此问题上停留了几天,非常感谢任何帮助,谢谢!

编辑:如果对此有任何更好的解决方案,请吐出来:)

这段代码看起来不对:

 foreach (var pId "PartyId")

它甚至不应该编译。 可能你有

foreach (var pId in "PartyId")

并且此代码遍历“ PartyId”字符串中的字符。 而且恰好有7个。

从列表框中选择PartyId后,视图将仅将此ID发送到post方法。 在这种情况下,for循环变得毫无用处。 您的大多数问题都来自数据库中的多对多关系。 在此处阅读有关此内容的更多信息。 如果您希望在一次投票中有多个参与方,则可以创建1对*(或*对1)关系,这将为您提供更简便的方法。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM