ASP.NET MVC从ListBoxFor到控制器

时间:2016-06-01 17:41:48

标签: c# asp.net asp.net-mvc

我正在尝试从ListBoxFor返回一个以逗号分隔的字符串并将其保存到我们的数据库中。我稍后在程序中使用它并拆分字符串。

这就是我所拥有的:

型号:

public string Mask_Concat { get; set; }

查看:

<div class="fancy-form" id="mainMask">
    @Html.LabelFor(model => model.Mask_Concat, "Mask(s)", new { @class = "control-label col-md-2" })
    <div class="col-md-12">
        @Html.ListBoxFor(model => model.Mask_Concat, Enumerable.Empty<SelectListItem>(), new { @class = "chosen-container chosen-container-multi", @style = "width:300px" })
        @Html.ValidationMessageFor(model => model.Mask_Concat, "", new { @class = "text-danger" })
    </div>
</div>

控制器:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create([Bind(Include = "Mask_Concat")] Chip_Master chipMaster)
{
    if (ModelState.IsValid)
    {
        db.Chip_Master.Add(chipMaster);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(chipMaster);
}

目前,我只返回多选中的第一个值。 示例:ListBoxFor填充了mask1,mask2,mask3,mask4,mask5。

在创建中选择了mask1和mask5。

当Mask_Concat返回控制器时,只传递mask1。

如何将值传递为mask1,mask5?

1 个答案:

答案 0 :(得分:1)

在您的HTML上添加隐藏字段:

<input type="hidden" id="selectedValues" name="selectedValues"/>

向ListBoxFor

添加一个类
@Html.ListBoxFor(model => model.Mask_Concat, Enumerable.Empty<SelectListItem>(), new { @class = "chosen-container chosen-container-multi change-select", @style = "width:300px"})

这是onchange方法(jquery):

<script type="text/javascript">
     $('select .change-select').change(function () {
        var $hidden = $("#selectedValues");
        $hidden.val($(this).find('option:selected').map(function () {
            return $(this).val();
        }).get().join(", "));
    });
</script>

您的控制器将如下所示:

[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Chip_Master chipMaster)
{
    if (ModelState.IsValid)
    {
        chipMaster.Mask_Concat = Request.Form["selectedValues"];
        db.Chip_Master.Add(chipMaster);
        db.SaveChanges();
        return RedirectToAction("Index");
    }
    return View(chipMaster);
}