所以,这是一个一直困扰着我的具有挑战性的问题。
我有一个“复杂”的模型结构:
费用报表
费用*
- 费用档案*
一个 ExpenseReport 包含一个 Expenses 列表,它可能(或可能不)包含一个 ExpenseFile 对象列表。
ExpenseFile 对象包含(以及其他属性)一个byte[]来存储文件数据。
我已经设法为此创建了整个视图,它由一个表格结构组成,用户可以在其中向报告添加/删除费用,并且在每个单独的费用行上,用户可以添加/删除费用文件。所有这些都是使用 jquery/ajax 完成的。ExpenseFile EditorTemplate 包含一个
<input type="file" name="FileData" id="FileData" />
所以用户可以选择对应的文件。
模型结构(即 Report、Expense 和 ExpenseFile 对象层次结构)正确绑定,唯一的例外是 ExpenseFiles 的文件数据,它始终为空!
我知道输入文件可以在控制器中通过
ControllerBlahBlah(... IEnumerable<HttpPostedFileBase> FileData)
或者我可以实现一个自定义 ModelBinder 来获取这样的文件数据
var file = controllerContext.HttpContext.Request.Files["FileData"]
...
但是有没有办法让默认模型绑定器将每个输入文件绑定到对应的 ExpenseFile?
我问这个是因为如果没有,我可能不得不实现一个自定义活页夹,这会很痛苦,因为我不知道如何弄清楚如何绑定每个活页夹
controllerContext.HttpContext.Request.Files["FileData"]
到正确的文件。
任何帮助/想法表示赞赏。
笔记:
其他一切都正确绑定,每个嵌套列表项都包含正确的前缀等;
FileData 是我的 ExpenseFile 模型中 byte[] 属性的名称;