1

我是 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?

谢谢!

4

2 回答 2

0

当用户提交创建表单和应用程序流以执行[HttpPost] public ActionResult Create操作时,所有表单数据都存在于formValues参数中。

您必须从中读取这些数据formValues(例如:formValues["companyID"],从中构建适当的模型对象,然后更新 db.

于 2012-07-15T00:34:37.693 回答
0

该技巧与您的 MVC 代码无关。您必须更改业务层或数据访问层 (DAL) 代码才能读取/写入 2 个不同的数据库。

前一段时间我做了同样的项目来回答一个问题。这是:https ://stackoverflow.com/a/7667172/538387

我检查了代码,它仍然可以工作,你可以下载它并自己检查。

于 2012-07-14T16:11:58.547 回答