0

私は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 テーブルが更新されるようにすることです。パーティーテーブルに新しいパーティーを追加したくない!!

あなたが私の主張を理解してくれることを願っています。これで数日間立ち往生しています。どんな助けでも大歓迎です、ありがとう!

編集:これに対するより良い解決策がある場合は、吐き出してください:)

4

2 に答える 2

0

リストボックスからを選択するPartyIdと、ビューはこの ID のみを post メソッドに送信します。その場合、for ループは役に立たなくなります。あなたの問題のほとんどは、データベース内の多対多の関係に起因しています。詳細については、こちらをご覧ください。1 つの投票で多くの関係者を作成したい場合は、1 対 * (または * 対 1) の関係を作成すると、はるかに簡単に行うことができます。

于 2015-04-30T01:01:29.573 に答える
0

このコードは間違っているようです:

 foreach (var pId "PartyId")

コンパイルさえしないはずです。おそらくあなたは持っています

foreach (var pId in "PartyId")

そして、このコードは「PartyId」文字列内の文字を反復処理します。そしてたまたまちょうど7人います。

于 2013-03-17T20:16:53.667 に答える