简体   繁体   English

使用Jquery Ajax将模型和2个复选框列表发布到控制器

[英]Post model and 2 checkbox lists to controller with Jquery Ajax

I want to send 2 lists containing values of the checked checkboxes along with my model using JQuery Ajax from an EditorTemplate being used as a partial view. 我想使用被用作局部视图的EditorTemplate从JQuery Ajax发送2个列表,其中包含选中的复选框的值以及我的模型。 Here it is: 这里是:

@model EsdpExport.View_Models.ProductLineCreateViewModel
@using EsdpHelpers

<script type="text/javascript">

    $('#add-list').click(function () {

        var commoditiesToRemove = $('input[type="checkbox"].removeCheckbox:checked').map(function () {
            return $(this).val();
        }).toArray();
        var commoditiesToAdd = $('input[type="checkbox"].addCheckbox:checked').map(function () {
            return $(this).val();
        }).toArray();

        $.ajax({
            type: 'POST',
            url: { @Url.Action("UpdateCommodityList", "ProductLine") },
            contentType: "application/json; application/json; application/json",
            data: { availableCommoditiesToAdd: commoditiesToAdd,
                currentCommoditiesToRemove: commoditiesToRemove,
                @Model.ToJson() },
            success: function (result) {
                $('#CommodityTable').html(result);
            },
        });

        return false;
    });

    $('#remove-list').click(function () {

        var commoditiesToRemove = $('input[type="checkbox"].removeCheckbox:checked').map(function () {
            return $(this).val();
        }).toArray();
        var commoditiesToAdd = $('input[type="checkbox"].addCheckbox:checked').map(function () {
            return $(this).val();
        }).toArray();

        $.ajax({
            type: 'POST',
            url: { @Url.Action("UpdateCommodityList", "ProductLine") },
            contentType: "application/json; application/json; application/json",
            data: {
                availableCommoditiesToAdd: commoditiesToAdd,
                currentCommoditiesToRemove: commoditiesToRemove,
                @Model.ToJson() },
            success: function (result) {
                $('#CommodityTable').html(result);
            },
        });

        return false;
    });

</script>


<div id="CommodityTable">

    @Html.WetStyleValidationSummary(true)
    <table title="Current Commodities">
        <tr>
            <th>
                Commodity Name
            </th>
            <th></th>
        </tr>
        @for (int i = 0; i < Model.CurrentCommodities.Count; i++)
        {
            <tr>
                <td>
                    @Html.HiddenFor(model => Model.CurrentCommodities[i].Name)
                    @Html.DisplayFor(model => Model.CurrentCommodities[i].Name)
                </td>
                <td>
                    @Html.HiddenFor(model => Model.CurrentCommodities[i].Id)
                    <input name="currentCommoditiesToRemove" class="removeCheckbox" type="checkbox" value="@Model.CurrentCommodities[i].Id">
                </td>
            </tr>
        }
    </table>

    <input id="remove-list" name="remove" type="button" value="Remove from Product" class="button button-accent ui-link" /> 

    <table title="Searched Commodities" id="Searched">
        <thead>
        <tr>
            <th>
                Commodity Name
            </th>
            <th></th>
        </tr>
    @for (int j = 0; j < Model.AvailableCommodities.Count; j++)
        {
        <tr>
            <td>
                @Html.HiddenFor(model => Model.AvailableCommodities[j].Name)
                @Html.DisplayFor(model => Model.AvailableCommodities[j].Name)
            </td>
            <td>
                @Html.HiddenFor(model => Model.AvailableCommodities[j].Id)
                <input name="availableCommoditiesToAdd" class="addCheckbox" type="checkbox" value="@Model.AvailableCommodities[j].Id" />
            </td>
        </tr>
        }
    </table>

    <input id="add-list" name="add" type="button" value="Add To Product" class="button button-accent ui-link" /> 

</div>

Here is the Controller action method: 这是Controller操作方法:

        [HttpPost]
        public ActionResult UpdateCommodityList(string[] availableCommoditiesToAdd,
            string[] currentCommoditiesToRemove, ProductLineCreateViewModel productModel)
        {
        }

For some reason, my POST isn't reaching the ActionMethod. 由于某种原因,我的POST无法到达ActionMethod。 Why? 为什么?

$ .ajax的Url参数是一个字符串,而不是对象,因此将该行更改为:

url: "@Url.Action("UpdateCommodityList", "ProductLine")",

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM