tag route net mvc form for custom asp asp.net-mvc forms razor submit form-submit

asp.net-mvc - route - mvc submit button action



El modelo es nulo cuando se envĂ­a el formulario (2)

Cuando presiono enviar, el parámetro del file es nulo.

public ActionResult Create() { return View(new FileViewModel()); } [HttpPost] [InitializeBlobHelper] public ActionResult Create(FileViewModel file) { if (ModelState.IsValid) { //upload file } else return View(file); } public class FileViewModel { internal const string UploadingUserNameKey = "UserName"; internal const string FileNameKey = "FileName"; internal const string Folder = "files"; private readonly Guid guid = Guid.NewGuid(); public string FileName { get { if (File == null) return null; var folder = Folder; return string.Format("{0}/{1}{2}", folder, guid, Path.GetExtension(File.FileName)).ToLowerInvariant(); } } [RequiredValue] public HttpPostedFileBase File { get; set; } }

Aquí está el cshtml:

@model MyProject.Controllers.Admin.FileViewModel @{ ViewBag.Title = "Create"; Layout = "~/Views/Shared/_BackOfficeLayout.cshtml"; } @using (Html.BeginForm("Create", "Files", FormMethod.Post, new { enctype = "multipart/form-data" })) { <fieldset> <legend>Create</legend> <div class="editor-label"> @Html.LabelFor(model => model.File) </div> <div class="editor-field"> @Html.TextBoxFor(model => model.File, new { type = "file" }) @Html.ValidationMessageFor(model => model.File) </div> <p> <input type="submit" value="Create" /> </p> </fieldset> } <div> @Html.ActionLink("Back to List", "Index") </div>


Es un conflicto de nombres y una carpeta que intenta unir su propiedad File al objeto FileViewModel con nombre de archivo, por eso obtiene nulo. Los nombres POST no distinguen entre mayúsculas y minúsculas.

Cambio:

public ActionResult Create(FileViewModel file)

A:

public ActionResult Create(FileViewModel model)

o a cualquier otro nombre


Esto resolvió mi problema también. Era un nombre que estaba usando que era similar al modelo, que era similar a la variable que asigné al modelo publicado también. una vez que resolví el nombre del campo, todo funcionó como se esperaba.

Por supuesto, el error no fue útil para señalar esto.