Вы перепутали asp-for
и атрибут имени name
(asp-for="FormFile" name="ProviderUpload"
).
Помощник ввода тега связывает элемент HTML <input>
с выражением модели в вашем представлении бритвы:
<input asp-for="<Expression Name>">
Создает атрибуты id и name HTML для имени выражения, указанного в атрибуте asp -for. asp-for="Property1.Property2"
эквивалентно m => m.Property1.Property2
. Имя выражения - это то, что используется для значения атрибута asp-for
.
Итак, ваш код выглядит как -
Вид: -
@model SampleProject.ViewModels.LoadProvidersBulkViewModel
<form method="post" enctype="multipart/form-data" asp-controller="Admin" asp-action="LoadProvidersBulk">
<h6 class="text-muted">Upload Provider File</h6>
<h6 class="text-muted small">Supported File Types: <b>.xlsx</b></h6>
<div class="form-group-row d-inline-flex badge-dark" style="padding-top:10px; padding-bottom:10px;">
<div class="col-sm-4" style="padding:2px">
<input type="file" asp-for="FormFile" class="form-control-sm" />
</div>
</div>
<div class="form-group row" style="padding-top:10px">
<div class="col-sm-5 text-left">
<button class="btn btn-sm btn-dark btn-primary" type="submit">Load Providers</button>
<a asp-action="LoadProviders" class="btn btn-sm btn-dark btn-primary">Cancel</a>
</div>
</div>
</form>
Контроллер: -
[HttpPost]
public async Task<IActionResult> LoadProvidersBulk(LoadProvidersBulkViewModel model)
{
var file = model.FormFile;
if (file == null || file.Length <= 0)
{
ModelState.AddModelError("BulkUploadError", "The file cannot be empty");
return View("LoadProvidersBulk");
}
/* Removed all other code for brevity */
return RedirectToAction("Users", _userManager.Users);
}