在将数据传递给控制器中的操作过程中,我面临问题
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