我正在尝试发布PersonViewModel的列表,只要PersonViewModel没有任何IFormFile属性,它就可以正常工作。
剃刀页面模型:
public class TestModel : PageModel
{
[BindProperty]
public PersonViewModel[] People { get; set; }
public void OnGet()
{
}
public void OnPost()
{
// Do something with People property
}
}
ViewModel:
public class PersonViewModel
{
public string Name { get; set; }
public string LastName { get; set; }
}
HTML格式:
<form method="post" enctype="multipart/form-data">
<input type="text" name="People[0].Name" class="form-control" />
<input type="text" name="People[0].LastName" class="form-control" />
<input type="text" name="People[1].Name" class="form-control" />
<input type="text" name="People[1].LastName" class="form-control" />
<button type="submit" class="btn btn-success">Submit</button>
</form>
但是,如果我向ViewModel添加一个IFormFile并再次发布该表单,则该表单将无法到达post action方法。
ViewModel:
public class PersonViewModel
{
public string Name { get; set; }
public string LastName { get; set; }
public IFormFile Photo { get; set; } = null;
}
HTML格式:
<form method="post" enctype="multipart/form-data">
<input type="text" name="People[0].Name" class="form-control" />
<input type="text" name="People[0].LastName" class="form-control" />
<input type="file" name="People[0].Photo" class="form-control" />
<input type="text" name="People[1].Name" class="form-control" />
<input type="text" name="People[1].LastName" class="form-control" />
<input type="file" name="People[1].Photo" class="form-control" />
<button type="submit" class="btn btn-success">Submit</button>
</form>
项目版本:ASP.NET Core 2.2
项目模板:ASP.NET Razor页面
我做错了什么吗?还是与asp.net核心有关?
答案 0 :(得分:0)
我找到了一种解决方法,即将文件绑定到List<IFormFile>
,并在foreach循环中将值分配给Photo
的{{1}}。
我还发现,仅当模型绑定使用People
属性忽略Photo
属性时,它才起作用。
请参阅下面的演示
ViewModel:
[BindNever]
PageModel:
public class PersonViewModel
{
public string Name { get; set; }
public string LastName { get; set; }
[BindNever]
public IFormFile Photo { get; set; }
}
查看:
public class TestModel : PageModel
{
[BindProperty]
public List<PersonViewModel> People { get; set; }
[BindProperty]
public List<IFormFile> FileLists { get; set; }
public void OnGet()
{
}
public void OnPost()
{
for (int i = 0; i < People.Count; i++)
{
People[i].Photo = FileLists[i];
}
//var formFile = HttpContext.Request.Form.Files;
// Do something with People property
}
}