1

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

        }
    }
4

3 回答 3

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

于 2013-09-20T07:38:34.493 回答
0

您只需要接收一个List<string>参数,其名称与您为复选框提供的名称相同,即KCM_Brands. Model Binder 将直接为您反序列化它。

[HttpPost]
public ActionResult SaveOfficeConfiguration(int ? officeID, FormCollection form,
  List<string> KCM_Brands)
{
    ....
}

要序列化您的表单数据以发布它,请使用本文中建议的函数:

JSON对象发布使用表单序列化不映射到c#对象

于 2013-09-20T07:35:11.517 回答
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()
于 2013-09-20T08:04:09.827 回答