C# 是否在控制器中多次使用相同的ViewModel属性上载不同的项目?

C# 是否在控制器中多次使用相同的ViewModel属性上载不同的项目?,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我在一个视图模型中有一个属性contractExtension,它是数据类型HttpPostedFileBase。这个属性背后的想法是允许用户上传合同扩展名,一旦他们上传了合同扩展名,我应该能够使用属性contractExtension访问文件信息。问题是,用户可能需要一次上载多个合同扩展。合同延期的数量可能会有所不同 [FileTypes("doc,DOC,docx,DOCX,pdf,PDF,jpg,jpeg,png")] public HttpPostedFileBase ContractE

我在一个视图模型中有一个属性
contractExtension
,它是数据类型
HttpPostedFileBase
。这个属性背后的想法是允许用户上传合同扩展名,一旦他们上传了合同扩展名,我应该能够使用属性
contractExtension
访问文件信息。问题是,用户可能需要一次上载多个合同扩展。合同延期的数量可能会有所不同

[FileTypes("doc,DOC,docx,DOCX,pdf,PDF,jpg,jpeg,png")]
public HttpPostedFileBase ContractExtention { get; set; }
public List<amendcontract> amendcontract { get; set; }

如果
contract.ContractDocumentID
为空,则表示用户尚未上载任何文件,否则用户已上载文件,但正在等待批准。当用户获得合同扩展时,它将被添加到修改合同表中。我的代码将遍历
amendcontract
中的每个项目,如果用户需要上传文件,它将使用
ContractExtension
属性允许用户上传文件。如何允许用户使用属性
ContractExtension
一次上载多个文件?

我发现一次上载多个文件的最佳方法是使用JQuery将所有文件整理成一个FormData对象,异步发布它们,然后在控制器操作中使用Request.Files接收它们,而不是尝试在视图模型中使用HttpPostedFileBase

由于您有多个文件输入,因此必须迭代所有文件并添加每个文件

var data = new FormData();
$("input[type=file]").each(function(i, obj) {
                    var files = $(obj).get(0).files;
                    if (files) {
                        for (var x = 0; x < files.length; x++) {
                            data.append("file" + x, files[x]);
                        }
                    }
                });
                $.ajax({
                    url: '@Url.Action("Action", "Controller")',
                    type: 'post',
                    data: data,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function(response) {

                    }
                });

考虑在视图模型上添加类似列表文件的属性,然后制作UI(使用类似jquery的功能)以添加多个文件输入将
multiple
属性添加到输入中,并使属性
IEnumerable
无OP表示要使用ajax的地方。建议OP使用
Request
而不是强绑定到模型是一个糟糕的建议(这意味着它们的验证属性将不起作用)。我实际上没有注意到该属性,这是我糟糕的行为。我接受你的观点,提供OP没有要求的建议。为未来着名。
var data = new FormData();
$("input[type=file]").each(function(i, obj) {
                    var files = $(obj).get(0).files;
                    if (files) {
                        for (var x = 0; x < files.length; x++) {
                            data.append("file" + x, files[x]);
                        }
                    }
                });
                $.ajax({
                    url: '@Url.Action("Action", "Controller")',
                    type: 'post',
                    data: data,
                    cache: false,
                    contentType: false,
                    processData: false,
                    success: function(response) {

                    }
                });
for (int i = 0; i< Request.Files.Count; i++)
{
}
data.append("key", "test");
data.append("value", "test");


public ActionResult Upload(string key, string value)
{
    //key = test, value = test
    var files = Request.Files; //HttpFileCollectionBase
}