我是 MVC 新手,也是编程新手(一般意义上)。
我正在苦苦思考如何根据我从填充的 MultiSelectList 中提取的值将多个数据库条目发布到我的数据库中(通过我的控制器)。
基本上,我正在尝试创建一个包含州和城市的简单模型,并让用户根据从单独的静态数据库中提取的州/城市值选择多个城市值并将其保存到他们的帐户中。
这是我的模型:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.ComponentModel.DataAnnotations;
namespace BidFetcher.Models
{
public class SPServiceLocation
{
public int SPServiceLocationID { get; set; }
public int SPCompanyAccountID { get; set; }
[Display(Name = "State")]
public string state { get; set; }
[Required]
[Display(Name = "Cities (select all that apply)")]
public string city { get; set; }
public virtual SPCompanyAccount SPCompanyAccount { get; set; }
}
}
这是我的视图数据的片段(包括我可以轻松填充的城市的多选列表):
<div class="editor-label">
@Html.LabelFor(model => model.state)
</div>
<div class="editor-field">
@Html.DropDownList("state", ViewBag.state as SelectList, "Select a state...", new { @class = "chzn-select", onchange = "CityChange()" })
@Html.ValidationMessageFor(model => model.state)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.city)
</div>
<div class="editor-field" id="SP_SelectCity">
@Html.ListBox("city", ViewBag.city as MultiSelectList, new { @class = "chzn-select", data_placeholder = "Select cities..." })
@Html.ValidationMessageFor(model => model.city)
</div>
<p>
<input type="submit" value="Submit" />
</p>
这是我的创建/发布控制器:
public ActionResult Create()
{
ViewBag.sessionName = HttpContext.Session["SPCompanyName"].ToString();
var compID = HttpContext.Session["SPCompanyAccountID"].ToString();
ViewBag.companyID = compID;
ViewBag.state = new SelectList(simpleDB.simpleState, "simpleStateID", "simpleStateID");
ViewBag.city = new MultiSelectList(simpleDB.simpleCity, "cityFull", "cityFull");
return View();
}
[HttpPost]
public ActionResult Create(SPServiceLocation spservicelocation, FormCollection formValues)
{
if (ModelState.IsValid)
{
db.SPServiceLocation.Add(spservicelocation);
db.SaveChanges();
return RedirectToAction("Create", "SPServiceLocation");
}
return View(spservicelocation);
}
如您所见,我在 [HttpPost] 中遗漏了一些内容,可以让我将多个值保存到db数据库中,但我不确定到底遗漏了什么。我已经看到一些帖子在创建 IEnumerable 列表方面对此进行了解释,但我想我只是不确定是否需要这样做,因为我已经通过数据库调用成功填充了 MultiSelectList。
任何帮助是极大的赞赏!
编辑:
根据下面的答案,如果我想根据从 MultiSelectList 收集的结果创建多个新的数据库行,我需要使用 Form 集合来获取这些结果并在我的 HttpPost 中解析它们:
而且......我不知道该怎么做。我假设以下几点:
[HttpPost]
public ActionResult Create(SPServiceLocation spservicelocation, FormCollection formValues)
{
if (ModelState.IsValid)
{
foreach (var item in x)
{
db.SPServiceLocation.Add(spservicelocation);
db.SaveChanges();
}
return RedirectToAction("Create", "SPServiceLocation");
}
return View(spservicelocation);
}
类似于上述内容,我根据我的多选列表创建一个集合,将其分解为多个变量,然后在我重定向之前多次遍历我的 database.SaveChanges?
谢谢!