【发布时间】:2019-01-26 20:42:07
【问题描述】:
我正在尝试在用户完成选择多个文件后立即使用 jQuery AJAX 在 ASP.NET Core 中手动发布表单。我正在使用的 Uploader 有一个“selected”事件,我想使用 jQueryAJAX 将表单发布到服务器。
当向表单添加提交按钮并在 UI 上单击它时,此完全相同的表单会完美地发布到服务器。 Files 已绑定,ProductId 已绑定。但是,我试图避免页面闪烁。作为替代解决方案,我通过调用提交表单: $("#form").submit();在 onSelect 函数中而不是在 AJAX 请求中。
模型如下所示:
public int ProductId { get; set; }
public IList<IFormFile> Files { get; set; }
表单如下所示:
<form method="post" enctype="multipart/form-data">
<ejs-uploader id="Files" showFileList="false" autoUpload="false" multiple="true" selected="onSelected" success="onSuccess" allowedExtensions=".doc, .docx, .pdf, .jpg, .jpeg, .png"></ejs-uploader>
<input asp-for="ProductId" type="hidden" />
</form>
这是我一直在尝试但不起作用的 JavaScript:
function onSelected(args) {
var files = args.filesData;
var formData = new FormData();
for (var i = 0; i != files.length; i++) {
formData.append("files[]", files[i]);
}
$.ajax({
type: "POST",
contentType: false,
url: '?handler=FileUpload',
data: formData,
processData: false,
headers: {
RequestVerificationToken:
$('input:hidden[name="__RequestVerificationToken"]').val()
},
success: function (data) {
},
});
//$("#form").submit();
}
我用的是razer pages所以操作方法是:
[BindProperty]
public int MessageId { get; set; }
[BindProperty]
public IList<IFormFile> Files { get; set; }
public async Task<ActionResult> OnPostAsync()
{
}
我也尝试过创建一个视图模型:FileUploadViewModel,其中包含相同的 2 个属性。
public async Task<ActionResult> OnPostAsync(FileUploadViewModel vm)
{
}
【问题讨论】:
-
请出示您的操作方法
-
@CamiloTerevinto 我上传了一些关于 Action 方法的附加信息。我正在使用与 MVC 略有不同的剃须刀页面。页面本身具有属性,因此可以消除视图模型。但是,我也尝试将 ViewModel 作为参数。没有什么是有约束力的。这篇文章是我发现的最接近我想要做的事情,但他只为一个文件做这件事。此外,我什至无法正常工作。 learnrazorpages.com/razor-pages/ajax/upload-files
-
嗯,我不确定 Razor Pages,但在 MVC 中这是错误的。你需要一个
[FromForm] FileUploadViewModel vm,虽然这可能是默认值 -
想一想,你应该使用
formData.append("Files", files[i]);
标签: javascript c# jquery asp.net-core