0

鉴于现代版本,我试图找出实现这一目标的最佳方法。我正在使用 VS2012 MVC4 EF5 并从我的数据库中构建了一个 edmx 文件。我构建了一个允许提交供应商信息的表单。主表是供应商表,主要包含联系信息,还有一些附加表存储他们的多个类别选择(复选框列表)和另一个存储他们的少数信息(单选按钮的集合)。所以我的 ViewModel 是供应商表,我用视图包填充复选框和单选按钮,这些视图包查询查找表的值。

所以我假设我应该将类别和少数部分构建到 ViewModel 中,并以某种方式连接魔法,以便数据库知道如何保存返回的值,或者我应该只使用视图包,然后以某种方式在发布后读取这些值并循环它们将它们存储到数据库中?无论哪种方式,我都被卡住了,不知道该怎么做。

我在网上搜索了很多例子,但没有一个适合这种情况。这不是一个复杂的数据模型,但应该是相当普遍的现实世界情况。我是 MVC 的新手,所以如果我遗漏了一些明显的东西,请原谅我。

任何指导表示赞赏。

更新:这是将 ViewModel 保存到数据库的基本代码,但是如何保存复选框列表和单选按钮。我认为有两种方法 1)以某种方式将它们包含在 ViewModel 中或 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 种口味的列表中选择他们最喜欢的冰淇淋口味。您需要将人员的联系信息保存在主表中,然后将他们的风味选择集合保存在另一个表中(一对多)。我有一个用于联系表单的 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 回答