0

最新バージョンを考慮して、これを達成するための最良の方法を見つけようとしています。VS2012 MVC4 EF5 を使用しており、データベースから edmx ファイルを作成しました。ベンダー情報を送信できるフォームを作成しました。主なテーブルは、主に連絡先情報を含む Vendor テーブルであり、複数のカテゴリの選択肢 (チェックボックス リスト) を格納する追加のテーブルと、マイノリティ情報 (ラジオ ボタンのコレクション) を格納する別のテーブルがあります。したがって、私の ViewModel はベンダー テーブルであり、チェックボックスとラジオ ボタンにビュー バッグを設定して、ルックアップ テーブルの値を照会します。

したがって、カテゴリと少数派の部分をViewModelに構築し、何らかの方法で魔法を結び付けて、データベースが返された値を保存する方法を認識できるようにするか、ビューバッグを使用して、ポストでそれらの値を読み取ってループする必要があると思いますそれらをデータベースに保存するには?いずれにせよ、私は立ち往生しており、これを行う方法がわかりません。

オンラインで多数の例を検索しましたが、この状況に適合するものはありません。これは複雑なデータ モデルではありませんが、現実世界でよく見られる状況です。私は MVC を初めて使用するので、明らかな何かが欠けている場合はご容赦ください。

任意のガイダンスをいただければ幸いです。

更新: ViewModel を db に保存するための基本的なコードを次に示しますが、チェックボックス リストとラジオ ボタンをどのように保存しますか。1) ViewModel に何らかの方法でそれらを含める方法、または 2) フォームのチェックボックスとラジオ ボタンの値を保存する別の機能を実行する方法の 2 つがあると思います。

        [HttpPost]
    public ActionResult Form(VendorProfile newProfile)
    {
        if (ModelState.IsValid)
        {
            newProfile.ProfileID = Guid.NewGuid();
            newProfile.DateCreated = DateTime.Now;

            _db.VendorProfiles.Add(newProfile);
            _db.SaveChanges();
            return RedirectToAction("ThankYou", "Home");
        }
        else
        {
            PopuplateViewBags();
            return View(newProfile);
        }
    }

おそらく、私の問題を別の言い方をすれば、人々がサインアップして、31 種類のフレーバーのリストから好きなアイスクリームのフレーバーをすべて選択するためのフォームを作成する必要があるとしたらどうなるでしょうか。個人の連絡先情報をプライマリ テーブルに保存してから、フレーバーの選択肢のコレクションを別のテーブルに保存する必要があります (1 対多)。お問い合わせフォーム用の ViewModel と、ルックアップ テーブルから表示されるフレーバーのリスト (チェックボックス リスト) があります。このフォームを保存するコードをどのように記述しますか?

4

1 に答える 1

0

解決策: もっと良い方法があるかもしれませんが、私が発見したことを投稿したかったのです。チェックボックスのコレクションを渡してから、データベースの挿入を処理する別のメソッドに送信できます。

        [HttpPost]
    public ActionResult Form(VendorProfile newProfile, int[] categories)
    {
        if (ModelState.IsValid)
        {
            newProfile.ProfileID = Guid.NewGuid();
            newProfile.DateCreated = DateTime.Now;

            _db.VendorProfiles.Add(newProfile);
            _db.SaveChanges();

            InsertVendorCategories(newProfile.ProfileID, categories);

            return RedirectToAction("ThankYou", "Home");
        }
        else
        {
            PopuplateViewBags();
            return View(newProfile);
        }
    }

    private void InsertVendorCategories(Guid ProfileID, int[] categories)
    {
        try
        {
            var PID = new SqlParameter("@ProfileID", ProfileID);
            var CID = new SqlParameter("@CatID", "");

            foreach (int c in categories)
            {
                CID = new SqlParameter("@CatID", c);
                _db.Database.ExecuteSqlCommand("Exec InsertVendorCategory @ProfileID, @CatID", PID, CID);
            }
        }
        catch { Exception ex; }
    }
于 2012-10-22T20:07:20.627 に答える