2013-03-17 107 views
0

表我有3个表:ASP.NET MVC实体框架插入许多一对多使用MultiSelectList

投票:

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 

在我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(?!)个新行添加到Party表和PartiesInPoll表中。 所以我想要的是让从列表框中选择的值从视图中发送,通过foreach循环发送,以便更新PartiesInPoll表。 我不想将新派对添加到派对桌上!

希望你明白了我的观点。 已被困在这一两天了,任何帮助高度赞赏,谢谢!

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

+0

查看'SimpleMembership Tables'查看'Membership和Roles,然后查看UsersInRoles'。尝试和'种子'的数据,如果你有'迁移启用' – Komengem 2013-03-17 21:43:40

回答

0

此代码看起来错误:

foreach (var pId "PartyId") 

它不应该编译。可能你有

foreach (var pId in "PartyId") 

而这段代码遍历“PartyId”字符串中的字符。恰好有7个。

+0

是的,我的错误,当我粘贴..!在我的原始代码中是正确的。对于那个很抱歉。 – Lars 2013-03-17 20:21:06

0

从列表框中选择一个PartyId后,该视图仅将该ID发送到post方法。 for循环在这种情况下变得毫无用处。你的大部分问题都来自你在数据库中的多对多关系。阅读更多关于here。如果你想在一个民意调查中有多个参与方创建1个*(或*到1)的关系,你会发现这样做更容易。