私は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 つ (?!) の新しい行が Party テーブルと PartiesInPoll テーブルに追加されます。だから私が望むのはもちろん、リストボックスから選択された値をビューから foreach ループを介して送信できるようにすることで、PartiesInPoll テーブルが更新されるようにすることです。パーティーテーブルに新しいパーティーを追加したくない!!
あなたが私の主張を理解してくれることを願っています。これで数日間立ち往生しています。どんな助けでも大歓迎です、ありがとう!
編集:これに対するより良い解決策がある場合は、吐き出してください:)