如何反序列化复选框值的JSON数据?

时间:2013-09-20 07:15:53

标签: c# javascript jquery asp.net-mvc json

我在表单中有多个复选框值。我正在序列化表单并作为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);

        }
    }

3 个答案:

答案 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));
}

更多信息请点击此处: http://www.mindstick.com/Articles/2ee905ba-aea1-4d83-a49d-d8d8fb10c747/?Checkbox%20control%20in%20MVC

答案 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()