没有数据传递到.Net Core中的IFormFile



在将数据传递给控制器中的操作过程中,我面临问题

public class LeadFile : BaseEntity
{
public int LeadId { get; set; }
public string Name { get; set; }
public string Description { get; set; }
public string FileType { get; set; }
public byte[] DataFiles { get; set; }  ***********
public Lead Lead { get; set; }
}

我的ViewModel

public class LeadFileViewModel
{
public int Id { get; set; }
public string Description { get; set; }
public string Name { get; set; }
public string FileType { get; set; }
public IFormFile DataFiles { get; set; }   ***********
}

我使用这个扩展将IFileForm转换为byte[]

public static class FormFileExtensions
{
public static byte[] GetBytes(this IFormFile formFile)
{
using (var memoryStream = new MemoryStream())
{
formFile.CopyToAsync(memoryStream);
return memoryStream.ToArray();
}
}
}

这是我的View

@using (Html.BeginForm("AddFileTempItem", "Leads", FormMethod.Post, new
{
id = "AddLeadFileForm",
@enctype = "multipart/form-data",
@data_ajax = "true",
@data_ajax_method = "post",
@data_ajax_update = "#FileInformatiomList",
@data_ajax_failure = "onFailureDefault",
@data_ajax_complete = "AddFileTempItemOnComplete"
}))
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label asp-for="DataFiles" class="control-label"></label>
<input asp-for="DataFiles" type="file" class="form-control" /> ***********
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
</div>
</div>
</div>
<div class="modal-footer">
<input type="submit" value="Add File" class="btn btn-primary" />
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>

这个控制器动作

[HttpPost]
public ActionResult AddFileTempItem(LeadFileViewModel model)
{
List<LeadFileViewModel> models = LeadFileViewModelsList;
models.Add(new LeadFileViewModel
{
Id = models.Count + 1,
Name = model.Name,
DataFiles = model.DataFiles,
Description = model.Description,
FileType = model.FileType,
});
LeadFileViewModelsList = models;
return PartialView("_LeadFilesGridPartial", LeadFileViewModelsList);
}

我的问题是,当我单击"添加"按钮时,每次为null时,都不会有数据传递到viewModel中的DataFiles属性。任何人都可以帮我解决这个问题。

感谢

试着使用我之前关于通过HTTP传输文件的问题的答案。为了将文件(和一个对象中的其他信息)传输到控制器;FormData";在JS中键入。资源地址:Ajax POST未达到控制器断点

第一次故障:指令";使用时不带大括号!第二个故障:如果您使用视图中的任何模型类,则应该分配该类。

下面,我将视图的代码粘贴为"的正确格式;使用";指令:

@model LeadFileViewModel;
@{
ViewData["Title"] = "Home Page";
}
<div class="text-center">
@using (Html.BeginForm("AddFileTempItem", "Leads", FormMethod.Post, new
{
id = "AddLeadFileForm",
@enctype = "multipart/form-data",
@data_ajax = "true",
@data_ajax_method = "post",
@data_ajax_update = "#FileInformatiomList",
@data_ajax_failure = "onFailureDefault",
@data_ajax_complete = "AddFileTempItemOnComplete"
}))
{
<div class="row">
<div class="col-sm-4">
<div class="form-group">
<label asp-for="DataFiles" class="control-label"></label>
<input asp-for="DataFiles" type="file" class="form-control" /> 
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label asp-for="Name" class="control-label"></label>
<input asp-for="Name" class="form-control" />
</div>
</div>
<div class="col-sm-4">
<div class="form-group">
<label asp-for="Description" class="control-label"></label>
<input asp-for="Description" class="form-control" />
</div>
</div>
</div>
<div class="modal-footer">
<input type="submit" value="Add File" class="btn btn-primary" />
<button type="button" class="btn btn-secondary" data-dismiss="modal">Close</button>
</div>
}
</div>

您是否通过表单提交发送数据?如果是,则当表单包含任何<input type="file">元素时,应使用multipart/form-data

<form asp-action="AddFileTempItem" method="post" enctype="multipart/form-data">
//...
</form

最新更新