我正在尝试从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?
答案 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);
}