将附件和一些其他参数上传到MVC Controller

时间:2018-10-09 14:11:53

标签: javascript jquery ajax asp.net-mvc-4

我有一个具有以下签名的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以匹配控制器签名。

2 个答案:

答案 0 :(得分:1)

尝试添加另一个formdata parameter

formData.append("listingId", guidValue);

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

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

答案 1 :(得分:0)

一种方法是让您的控制器接受包含您需要的不同属性的viewmodel(一个类)。并使用formdata.append必需的东西发布到服务器。

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

modelbinder的引用:https://www.dotnetcurry.com/aspnet-mvc/1261/custom-model-binder-aspnet-mvc

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