我试图找出在现代版本中实现这一目标的最佳方法。我使用VS2012 MVC4 EF5并从我的数据库中构建了一个edmx文件。我构建了一个允许提交供应商信息的表单。主表是供应商表,主要包含联系信息,还有其他表存储他们的多个类别选项(复选框列表),另一个表存储他们的少数信息(单选按钮集合)。所以我的ViewModel是供应商表,我用查看包填充复选框和单选按钮,查询表查询查找表的值。
所以我假设我应该将类别和少数部分构建到ViewModel中并以某种方式连接魔术,以便数据库知道如何保存返回的值,或者我应该只使用viewbags然后以某种方式在post上读取这些值和循环遍历它们将它们存储到数据库中?无论哪种方式,我都被卡住了,不知道该怎么做。
我在网上有很多例子,但没有一个符合这种情况。这不是一个复杂的数据模型,但应该是相当普遍的现实世界情况。我是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和一个从查找表中显示的flavor(复选框列表)列表。你如何编写代码来保存这个表单?
答案 0 :(得分: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; }
}