gpt4 book ai didi

http - 在 MVC4 上的复杂模型中上传多个文件

转载 作者:塔克拉玛干 更新时间:2023-11-01 19:10:50 26 4
gpt4 key购买 nike

所以,这是一个一直困扰着我的具有挑战性的问题。

我有一个“复杂”的模型结构:

费用报表

  • 费用*

    • 费用文件*

ExpenseReport 包含一个 Expenses 列表,该列表可能(或可能不)包含一个 ExpenseFile 对象列表。

ExpenseFile 对象包含(在其他属性中)一个byte[] 来存储文件数据。

我已经设法为此创建了整个 View ,它由一个表格结构组成,用户可以在其中向报告添加/删除费用,并且在每个单独的费用行上,用户可以添加/删除 ExpenseFile。所有这些都是使用 jquery/ajax 完成的。 ExpenseFile EditorTemplate 包含一个

<input type="file" name="FileData" id="FileData" />

所以用户可以选择相应的文件。

模型结构(即 Report、Expense 和 ExpenseFile 对象层次结构)正确绑定(bind),唯一的异常(exception)是 ExpenseFiles 的文件数据,它始终为空!

我知道在 Controller 中可以通过以下方式访问输入文件

ControllerBlahBlah(... IEnumerable<HttpPostedFileBase> FileData)

或者我可以实现一个自定义的 ModelBinder 来获取这样的文件数据

var file = controllerContext.HttpContext.Request.Files["FileData"] 
...

但是有没有办法让默认模型绑定(bind)器将每个输入文件绑定(bind)到相应的 ExpenseFile?

我问这个是因为如果没有,我可能不得不实现一个自定义绑定(bind)器,这会很痛苦,因为我不知道如何弄清楚如何绑定(bind)每个

controllerContext.HttpContext.Request.Files["FileData"] 

到正确的文件。

感谢任何帮助/想法。

注意事项:

  • 其他一切都正确绑定(bind),每个嵌套列表项都包含 right prefixes等;

  • FileData 是我的 ExpenseFile 模型中 byte[] 属性的名称;

最佳答案

刚刚想通了。这是答案,以防有人遇到同样的问题:

  • 我在我的 ExpenseFile 模型 View 上添加了一个 HttpPostedFileBase 属性;
  • 我创建了 my own EditFor for HttpPostedFileBase ;
  • 然后,在我的 ExpenseFile View 中,我使用

    @Html.EditorFor(model => model.postedFile)

代替

<input type="file" name="FileData" id="FileData" />

现在文件数据正确绑定(bind),我所要做的就是将 HttpPostedFileBase 的数据转换为服务器端( Controller )上的 byte[]。

关于http - 在 MVC4 上的复杂模型中上传多个文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14565346/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com