在将自定义对象列表传递到我的控制器时出现问题
这是模型
public class UploadDocumentViewModel
{
public string EncryptedApplicationId { get; set; }
public List<DocumentViewModel> Documents { get; private set; }
public UploadDocumentViewModel()
{
Documents = new List<DocumentViewModel>();
}
}
public class DocumentViewModel
{
public IFormFile DocumentFile { get; set; }
public string DocumentDescription { get; set; }
}
和表格
<form asp-action="UploadDocuments" enctype="multipart/form-data">
<input asp-for="EncryptedApplicationId" type="hidden" />
<div class="form-group mt-20">
@for (int i = 0; i < Model.Documents.Count; i++)
{
<div class="form-group mt-20">
<input asp-for="Documents[i]" type="hidden" />
<label asp-for="Documents[i].DocumentDescription" />
<input asp-for="Documents[i].DocumentFile" />
</div>
}
</div>
<div class="form-group mt-20">
<a asp-action="Exit" asp-route-applicationId="@Model.EncryptedApplicationId" class="btn btn-info btn-primary btn-rounded text-left" style="position:relative;left:-1em;">Exit</a>
<button type="submit" class="btn btn-info btn-success btn-rounded text-right" style="position:relative;right:-8em;">Continue <i class="ti ti-angle-double-right" style="font-weight:bold;top:1px;right:-5px;position: relative;"></i></button>
</div>
</form>
但是在我的Post方法中,我的model.Documents
始终为空。不知道我在做什么错。
[HttpPost]
public async Task<IActionResult> UploadDocuments(UploadDocumentViewModel model)
答案 0 :(得分:0)
尝试删除asp-for
属性并使用有效的name
属性。您无需提供单词Model
即可提供模型。
@for (int i = 0; i < Model.Documents.Count; i++)
{
<div class="form-group mt-20">
@* if you want to send the data in the DocumentFile property, just send it as a hidden *@
@Html.HiddenFor(model => model.Documents[i].DocumentFile)
<label for="@Html.NameFor(model => model.Documents[i].DocumentFile)">@Html.DisplayFor(model => Documents[i].DocumentDescription)</label>
@Html.EditorFor(model => model.Documents[i].DocumentFile)
</div>
}
答案 1 :(得分:0)
结果证明,这要求我在视图模型上通过DocumentDescription
尝试过的其他构造函数,但是在没有描述传递给控制器时,绑定总是失败。
<form asp-action="UploadDocuments" enctype="multipart/form-data">
<input asp-for="EncryptedApplicationId" type="hidden" />
@for (int i = 0; i < Model.Documents.Count; i++)
{
<div class="form-group mt-20">
<input asp-for="Documents[i].DocumentDescription" type="hidden" />
<label class="control-label">@Model.Documents[i].DocumentDescription</label>
<input class="form-control" asp-for="Documents[i].DocumentFile" />
</div>
}
<div class="form-group mt-20">
<a asp-action="Exit" asp-route-applicationId="@Model.EncryptedApplicationId" class="btn btn-info btn-primary btn-rounded text-left" style="position:relative;left:-1em;">Exit</a>
<button type="submit" class="btn btn-info btn-success btn-rounded text-right" style="position:relative;right:-8em;">Continue <i class="ti ti-angle-double-right" style="font-weight:bold;top:1px;right:-5px;position: relative;"></i></button>
</div>
</form>