ajax其他参数为空?

ajax other parameter is null?

为什么我的其他参数为空。 "date" 和 "ids" 为空,而我的 "postedFile" 和 "amount" 有数据。但是当我尝试删除 "postedFile" 参数时。 ID 和日期有一个值。它工作正常。但我需要 postedfile 参数

我的脚本

  var ids = [];
function add(id, isChecked) {
    if (isChecked) {
        ids.push(id);
    }
    else {
        var i = ids.indexOf(id);
        ids.splice(i, 1);
    }
}

function saveSelected() {
    //var shipmentId = $('#c-shipment-id').val();
    var date = $('#Date').val();
    var amount = $('#Amount').val();
    //var ImageFile = $('#imageUploadForm').val();

    $('#imageUploadForm').on("change", function () {
        var formdata = new FormData($('form').get(0));
        CallService(formdata);
    });

    function CallService(postedFile) {
        $.ajax({
            url: '@Url.Action("index", "payment")',
            type: 'POST',
            data: { ids: ids, amount: amount, date: date, postedFile: postedFile },
            cache: false,
            processData: false,
            contentType: false,
            traditional: false,
            dataType:"json",
            success: function (data) {
                alert("Success");
            }
        });
    }
}

我的控制器

public ActionResult Index(int?[] ids, decimal? amount, DateTime? date, HttpPostedFileBase postedFile)
    {
        return View();
    }

正如上面的评论,我想你可以尝试传递所有带参数的值,而不是变量,比如:CallService(formdata, ids, amount, date)。它可能有效。

回答您的次要问题 - 在带有复选框列的 table 中获取所有选定的 ID:

首先,将 ID 添加到视图中复选框的 ID 中,例如:

foreach (var m in Model.Data)
{
    row++;
    <tr class="@(row % 2 == 0 ? "alter" : "")">
        <td class="first">
            <input id="chk_@m.ID" type="checkbox" onclick="js_selone(this)" />
        </td>
...

然后,创建一个 JS 方法 getSelVal() 来获取所有选定的 ID 和 return 与 , 组合的字符串,例如:1,2,3.

$.fn.getSelVal = function () {
    for (var e = "", t = $("input[type=checkbox]", this), n = 0; n < t.length; n++) t[n].checked && (e += "," + js_getid(t[n].id));
    return e.Trim(",");
}

最后,您可以调用该方法并将 idsids.toString().split(',') 传递给 AJAX 请求:

ids = $('.table td').getSelVal().toString().split(',');
CallService(formdata, ids, amount, date)

function CallService(postedFile, ids, amount, date) {
        $.ajax({
            url: '@Url.Action("index", "payment")',
            type: 'POST',
            data: { ids: ids, amount: amount, date: date, postedFile: postedFile },
            cache: false,
            processData: false,
            contentType: false,
            traditional: false,
            dataType:"json",
            success: function (data) {
                alert("Success");
            }
        });