【发布时间】:2017-09-26 23:02:22
【问题描述】:
我有一个 ASP.NET Core MVC 应用程序尝试上传 IFormFile。但是,IFormFile 始终为空。我发现的其他解决方案都没有解决这个问题。我做错了什么?
型号
public class EmailForm
{
[Display(Name = "Add a picture")]
[DataType(DataType.Upload)]
[FileExtensions(Extensions = "jpg,png,gif,jpeg,bmp,svg")]
public IFormFile SubmitterPicture { get; set; }
}
控制器
public async Task<ActionResult> Contribute([Bind("SubmitterPicture")] EmailForm model)
{
if (ModelState.IsValid)
{
//Do some stuff
}
}
查看
<form method="post" asp-action="Contribute" asp-antiforgery="true" enctype="multipart/form-data" >
<div class="form-group" >
<div class="col-md-2">@Html.LabelFor(m => m.SubmitterPicture)</div>
<div class="col-md-4">
<input type="file" name="SubmitterPicture" id="SubmitterPicture" />
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" class="btn btn-default" value="Contribute" />
</div>
</div>
【问题讨论】:
-
您的代码看起来非常好。你怎么知道它是 null ?您是否在您的操作方法中设置了断点并进行了检查?
-
是的。我在Contribute方法中放了一个断点,发现SubmitterPicture对象始终为null。因此,由于某种原因,此绑定无法正常工作。
-
我也遇到了同样的问题。到目前为止,我已经学习了 3 个教程,特别是 docs.microsoft.com/en-us/aspnet/core/tutorials/razor-pages/…,但我的 viewmodel 属性始终为空。是否有一些代码需要在启动类中配置?
-
@C.H.我发现了这个问题。如果您提交带有一个输入的表单,您应该在参数中获取变量,因为在这种情况下帖子没有使用视图模型(这是我的假设)。只要您在表单中提交多个属性,您的视图模型就会被填充。请看下面我的回答。 +1 给 OP。
标签: c# asp.net-mvc asp.net-core-mvc