将附件和一些附加参数上传到 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 上获得更多信息。 :)
我有一个具有以下签名的 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 上获得更多信息。 :)