だから、これが私を悩ませてきた挑戦的なものです。
私は「複雑な」モデル構造を持っています:
経費報告書
費用*
- ExpenseFile *
ExpenseReportには、ExpenseFileオブジェクトのリストが含まれる場合と含まれない場合があるExpensesのリストが含まれます。
ExpenseFileオブジェクトには、(他の属性の中でも)ファイルデータを格納するためのbyte[]が含まれています。
私はすでにこのためのビュー全体を作成することができました。これは、ユーザーが経費をレポートに追加/削除でき、個々の経費行でユーザーがExpenseFileを追加/削除できる表形式の構造で構成されています。それはすべてjquery/ajaxを使用して行われます。ExpenseFileEditorTemplateには
<input type="file" name="FileData" id="FileData" />
したがって、ユーザーは対応するファイルを選択できます。
モデル構造(つまり、Report、Expense、およびExpenseFileオブジェクト階層)は正しくバインドされますが、唯一の例外はExpenseFilesのファイルデータであり、これは常にnullです。
入力ファイルには、コントローラーから次の方法でアクセスできることを知っています。
ControllerBlahBlah(... IEnumerable<HttpPostedFileBase> FileData)
または、このようなファイルデータを取得するカスタムModelBinderを実装できます
var file = controllerContext.HttpContext.Request.Files["FileData"]
...
しかし、デフォルトのモデルバインダーが各入力ファイルを対応するExpenseFileにバインドする方法はありますか?
ない場合は、カスタムバインダーを実装する必要があり、それぞれをバインドする方法がわからないため、これは面倒です。
controllerContext.HttpContext.Request.Files["FileData"]
右のファイルに。
任意のヘルプ/アイデアをいただければ幸いです。
ノート:
他のすべては正しくバインドされており、ネストされた各リストアイテムには正しいプレフィックスなどが含まれています。
FileDataは、私のExpenseFileモデルのbyte[]プロパティの名前です。