提问人:Mladen Nikolov 提问时间:11/14/2023 最后编辑:Qing GuoMladen Nikolov 更新时间:11/14/2023 访问量:79
将多个输入文件绑定到 IEnumerable 中
Bind multiple input files into IEnumerable
问:
我正在将 ASP.NET MVC 用于一个小型网站。我找不到将多个文件输入绑定到一个 .IEnumerable
在我看来,我有以下意见:
<input type="file" name="medical-certificate-file" id="medical-certificate-file">
<input type="file" name="manager-degree-doc-file" id="manager-degree-doc-file">
我的模型如下所示:
public class Document
{
public DocumentType DocumentType { get; set; }
public IFormFile File { get; set; }
}
public class InputModel
{
public IEnumerable<Document> Documents { get; set; }
}
我尝试以成功映射其他表单数据的方式映射文件 - 更改 name 属性:
<input type="file" name="Documents.File" id="medical-certificate-file">
此解决方案有效,但当然仅适用于一个文件。从逻辑上讲,第二个不能使用相同的名称进行映射。
我也尝试使用asp-for,如下所示:
<input asp-for="Documents.ElementAt(0).File" type="file" name="medical-certificate-file" id="medical-certificate-file">
此解决方案甚至不适用于单个文件。我还尝试了不同种类的它。
我应该注意的是,输入表单是多个表单,而不是一个具有多个文件选择选项的表单。有几个文件,而不仅仅是我在示例中指出的两个文件。
提前感谢您抽出时间接受采访!
答:
0赞
Qing Guo
11/14/2023
#1
复杂对象绑定使用顺序索引。顾名思义,索引必须从 0 开始,并且必须是连续的。绝不能有差距。索引放在方括号中,并添加到表单字段的 name 属性中,例如name="Documents[0].file"
尝试使用将文件绑定到 IEnumerable Documents:name="Documents[0].file"
<input type="file" name="Documents[0].file" id="medical-certificate-file">
<input type="file" name="Documents[1].file" id="manager-degree-doc-file">
演示如下:
<form asp-action="Index" enctype="multipart/form-data">
<input type="file" name="Documents[0].file" id="medical-certificate-file">
<input type="file" name="Documents[1].file" id="manager-degree-doc-file">
<input type="submit" value="Create" />
</form>
结果:
或者:
@for (var i = 0; i < 5; i++)
{
<input type="file" name="Documents[@i].file" id="medical-certificate-file">
}
评论
0赞
Qing Guo
11/21/2023
嗨@Mladen尼科洛夫,有什么更新吗?如果我的回答能帮助您解决问题?如果没有,你能跟进让我知道吗?
评论
File
IFile
IEnumerable
asp-for="Documents"
asp-for="Documents.Select(x => x.File)"