FunwarsVM.cs
public class FunwarsVM : IFunwars
{
public int Id { get; set; }
public string Date { get; set; }
public string OurTeam { get; set; }
public string Status { get; set; }
public string Opponent { get; set; }
public string Score { get; set; }
public int FileID { get; set; }
public List<Funwars> Funwars { get; set; }
[NotMapped]
public ImageUpload Files { get; set; }
public FunwarsVM()
{
this.Funwars = new List<Funwars>();
this.Files = new ImageUpload();
}
}
ImageUpload.cs
public class ImageUpload
{
public int Id { get; set; }
public string Name { get; set; }
public string MimeType { get; set; }
public string FilePath { get; set; }
[NotMapped]
public List<IFormFile> Images { get; set; }
}
查看(仅图像上传部分)
<form id="holder" method="post" action="/Funwars/Add" enctype="multipart/form-data">
<div class="form-group">
<h3>Screenshots</h3>
<input type="file" name="files.images" value="@Model.Files.Images" multiple />
</div>
<input type="submit" name="submit" value="Submit" />
</form>
控制器
[HttpPost]
public async Task<IActionResult> Add(FunwarsVM model)
{
model.Add();
return RedirectToAction("Index",model);
}
所以,我想将图像文件从视图传递到控制器。当我在视图中传递@Model.Files.Images
时,意味着我正在传递List<IFormFile>
到我的模型,但它传递了null
!
但是当我添加
public List<IFormFile> Images { get; set;}
直接添加到我的FunwarsVM,然后将@Model.Images
传递到我的视图,它返回我要添加的正确图片!
当我创建List<IFormFile>
模型的实例后从视图中调用ImageUpload
对象时,为什么它不起作用,但是当我直接调用它时,它起作用了吗??
答案 0 :(得分:0)
由于控制器动作的参数中仅包含FunwarsVM
模型,因此除非它是FunwarsVM
对象的一部分,否则它将永远不会正确绑定,这就是为什么在使用模型时它可以工作的原因。
如果添加新参数List<IFormFile> images
,则它应该可以正常工作。不要在定义参数的方式上引用我,但我认为它必须与name
属性具有相同的名称才能自动绑定。
添加第二个参数,以便将其绑定到其他内容。
[HttpPost]
public async Task<IActionResult> Add(FunwarsVM model, List<IFormFile> images)
{
model.Add();
return RedirectToAction("Index",model);
}
答案 1 :(得分:0)
由于某些未知原因,如果仅传递一个属性(对于您的情况为Images
),则ASP.NET Core不会将文件绑定到嵌套对象。所以解决方案是只添加该类的其他任何属性来查看
<input type="hidden" name="files.id" />
<input type="file" name="files.images" value="@Model.Files.Images" multiple />