Я разработал форму, в которой поля формы содержат поля type=text
и type=file
поля.
@using (Html.BeginForm("UploadFiles", "Home", FormMethod.Post, new { enctype = "multipart/form-data"}))
{
@Html.AntiForgeryToken()
<div class="container">
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="row justify-content-center align-items-center">
<div class="card border-info col-sm-6">
<div class="card-body">
<div class="form-group">
@Html.LabelFor(model => model.UploadForm.Name, new { @class = "control-label" })
@Html.TextBoxFor(model => model.UploadForm.Name, "", htmlAttributes: new { @type = "text", @class = "form-control", aria_describedby = "nameHelp", placeholder = "Enter name" })
<small id="nameHelp" class="form-text text-muted">Name to be associated</small>
@Html.ValidationMessageFor(model => model.UploadForm.Name, "", new { @class = "text-danger" })
</div>
<div class="form-group">
@Html.LabelFor(model => model.UploadForm.files, htmlAttributes: new { @class = "control-label" })
@Html.TextBoxFor(model => model.UploadForm.files, "", htmlAttributes: new { @type = "file", @multiple = "multiple", @class = "form-control-file", aria_describedby = "filesHelp" })
<small id="filesHelp" class="form-text text-muted">Files to be uploaded</small>
@Html.ValidationMessageFor(model => model.UploadForm.files, "", new { @class = "text-danger" })
</div>
<div class="row justify-content-end" style="margin-right:1px;">
<input type="submit" value="Upload" class="btn btn-primary w-25"/>
</div>
</div>
</div>
</div>
<hr />
</div>
}
Мой контроллер выглядит как под
[HttpPost]
public ActionResult UploadFiles(HomeModel model)
{
if (ModelState.IsValid)
{
**// getting model.UploadForm.Name null here**
**// getting model.UploadForm.files is populated and contains files**
}
return View("Index", model);
}
Am Я что-то упустил?
Кроме того, если кто-нибудь может сказать, как я могу изменить контроллер для получения только соответствующих данных, как показано ниже. Я пытался сделать это, но все обнулялось.
UploadFiles (string name, HttpPostedFile[] files)
{
// both args are coming null
}
Изменить:
Это моя модель в соответствии с запросом:
public class HomeModel
{
public UploadForm UploadForm { get; set; }
public List<UploadedItem> UploadedItems { get; set; }
}
и вот как выглядит UploadForm
public class UploadForm
{
[Display(Name = "Name")]
[Required(ErrorMessage = "Please enter name.")]
public string Name;
[Required(ErrorMessage = "Please select file(s).")]
[Display(Name = "Files")]
public HttpPostedFileBase[] files { get; set; }
}