我在表单中有多个复选框值。我正在序列化表单并作为JSON数据发送到mvc控制器。如何反序列化复选框值?
这是我的HTML -
@using (Html.BeginForm("SaveOfficeConfiguration", "Offices", FormMethod.Post, new { Id = "frmOfficeConfigSave" }))
{
<div id="divOfficeForm">
<div style="width: auto; height: auto; border: 3px outset silver;">
<table class="mainsectionable" width="100%">
<thead>
<tr>
<th style="text-align: center;">
<center>KCCM Profile Access</center>
</th>
</tr>
<tr>
<td>
@using (Html.BeginForm())
{
IEnumerable<SelectListItem> Brands = ViewBag.GetBrands;
foreach (var item in Brands)
{
@Html.CheckBox("KCCM_Brands", false, new
{
value = item.Value
});
<label>@item.Text</label><br />
}
}
</td>
</tr>
</thead>
</table>
</div>
</div>
}
这是我的javascript函数 -
function SaveOfficeConfigNew() {
var officeID = $('input[name="hdnOfficeID"]').val();
var url = "/OfficeManagement/Offices/SaveOfficeConfiguration?officeID=" + officeID;
ShowWait();
$.ajax({
type: "POST",
url: url,
data: frmOfficeConfigSave.$('input').serialize(),
success: function (data) {
HideWait();
alert(data.msg);
},
error: function (data) {
HideWait();
alert(data.msg);
}
});
applyFilter();
return false;
}
这是我的控制者行动 -
[HttpPost]
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form)
{
try
{
*/..............
..............*/
return Json(new
{
success = true,
msg = String.Empty,
id = 1
}, JsonRequestBehavior.AllowGet);
}
catch (Exception error)
{
return Json(new
{
success = false,
msg = error.Message,
id = -1
}, JsonRequestBehavior.AllowGet);
}
}
答案 0 :(得分:0)
您只需要收到一个List<string>
参数,其名称与您提供的复选框相同,即KCM_Brands
。 Model Binder将直接为您反序列化。
[HttpPost]
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form,
List<string> KCM_Brands)
{
....
}
要序列化表单数据以发布它,请使用此帖子中的sugged函数:
JSON object post using form serialize not mapping to c# object
答案 1 :(得分:0)
您可以使用FormsCollection
检索复选框值:
控制器:
[HttpPost]
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form)
{
var CheckBoxValues = form["KCCM_Brands"].Split(new char[] { ',' }, StringSplitOptions.RemoveEmptyEntries).Select(x=>int.Parse(x));
}
答案 2 :(得分:0)
而不是
@Html.CheckBox("KCCM_Brands", false, new
{
value = item.Value
});
使用此代码生成复选框
<input type="checkbox" name="KCCM_Brands" value="@item.Value" />
控制器上的操作应该如下所示
public ActionResult SaveOfficeConfiguration(int? officeID, List<string> KCCM_Brands)
当您发布表单时,List<string> KCCM_Brands
将仅填充所选复选框的值。
此外,我不知道您的javascript是否正确,但我必须进行以下更改以使其正常工作
data: $('#frmOfficeConfigSave input').serialize()