将附件和一些附加参数上传到 MVC 控制器

Upload Attachment and some additional parameters to MVC Controller

我有一个具有以下签名的 MVC 控制器:-

[HttpPost]
public async Task<JsonResult> SaveBrochureAsAttachment(Guid listingId, HttpPostedFileWrapper attachmentFile)
{
     ///some logic
}

如何进行 ajax 调用并发送文件附件和附加的 listingId 参数。目前我只能这样发送附件:-

var uploadFile = function () {

    if ($('#attachmentFile').val()) {

    }
    else {
        alert('No File Uploaded');
        return;
    }

    var formData = new FormData($('#uploadForm')[0]);


    $.ajax({
        url: '/Listing/SaveBrochureAsAttachment',
        type: 'POST',
        data: formData,
        async: false,
        success: function (data) {
            alert('File Uploaded');
        },
        error: function (jqXHR, textStatus, errorThrown) {
            $("#FileUpload").replaceWith($("#FileUpload").val('').clone(true));
            alert('File Uploaded Error');
        },
        cache: false,
        contentType: false,
        processData: false
    });

    return false;
}

目前大家可以看到我只能发附件。如何同时发送 Guid listingId 以匹配控制器签名。

尝试添加另一个 formdata parameter:

formData.append("listingId", guidValue);

前提是您可以访问 guid 值。您可以从客户端使用 this to generate one。或者从服务器创建一个:

var guidValue = '@Guid.NewGuid()';

一种方法是让您的控制器接受包含您需要的不同 属性 的视图模型(class)。并使用 formdata.append 所需的东西 post 到服务器。

在服务器端;您将需要使用 modelbinder 以便填充所需的内容。

modelbinder 参考:https://www.dotnetcurry.com/aspnet-mvc/1261/custom-model-binder-aspnet-mvc

您可以在 google 上获得更多信息。 :)