【问题标题】:How to de-serialize JSON data of check box values?如何反序列化复选框值的 JSON 数据?
【发布时间】:2013-09-20 07:15:53
【问题描述】:

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

        }
    }

【问题讨论】:

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


    【解决方案1】:

    您只需接收一个List&lt;string&gt; 参数,该参数与您为复选框提供的名称相同,即KCM_Brands。 Model Binder 会直接为你反序列化。

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

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

    JSON object post using form serialize not mapping to c# object

    【讨论】:

    • 它的null,我的javascript函数有什么问题吗?
    • 我没有检查你的js。是的,这是错误的。我认为您已经检查了警报发送的内容。看看我添加的参考文献
    【解决方案2】:

    您可以使用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

    【讨论】:

    • 我有 3 个复选框,我先勾选了最后一个,然后提交了表单。我在使用您的代码时进行控制,我得到的值为"1","false","false","3","false"
    • 你必须从你的列表中删除那些错误的。你的结果是给你选择的复选框。
    • 我如何从这些值中知道选中的复选框?
    • 我在这里很困惑,我在这里找不到任何价值。
    • @sandy 访问答案中的链接。
    【解决方案3】:

    代替

    @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&lt;string&gt; KCCM_Brands 将仅填充选定复选框的值。

    另外,我不知道您的 javascript 是否正确,但我必须进行以下更改才能使其正常工作

    data: $('#frmOfficeConfigSave input').serialize()
    

    【讨论】:

    • 我必须遵循Json序列化
    • List&lt;string&gt; KCCM_Brandsnull!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-08-17
    • 2021-12-03
    • 2012-08-19
    • 2016-05-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多