Je dois saisir le code suivant dans le contrôleur et la vue. Le problème est que le modèle (Photo est une entité Entity Framework) est vide (tous les champs sont annulés). Pourquoi?Modèle vide lors de la soumission du formulaire asp.net mvc 2
// GET: /Admin/Photo/Create
public ActionResult Create()
{
return View();
}
//
// POST: /Admin/Photo/Create
[HttpPost]
public ActionResult Create(int id, FormCollection collection)
{
try
{
var file = (HttpPostedFileBase) Request.Files[0];
if (file != null && file.FileName != null)
{
var filename = Path.Combine(AppDomain.CurrentDomain.BaseDirectory, "Photos/Product/", Path.GetFileName(file.FileName));
file.SaveAs(filename);
var photo = new Photo();
photo.Description = collection["Description"];
photo.Main = collection["Main"].Contains("true");
photo.Filename = Path.GetFileName(file.FileName);
photo.Product_Id = id;
Entities.AddToPhotos(photo);
Entities.SaveChanges();
}
else
{
ModelState.AddModelError("", "Plik musi zostać załadowany.");
return View();
}
return RedirectToAction("Index");
}
catch
{
return View();
}
}
<h2>Create</h2>
<% using (Html.BeginForm(null, null, null, FormMethod.Post, new {enctype = "multipart/form-data" })) {%>
<%: Html.ValidationSummary(true) %>
<fieldset>
<legend>Fields</legend>
<div class="editor-label">
<%: Html.LabelFor(model => model.Description) %>
</div>
<div class="editor-field">
<%: Html.TextBoxFor(model => model.Description) %>
<%: Html.ValidationMessageFor(model => model.Description) %>
</div>
<div class="editor-label">
<label for="MainContent_file">Plik: </label>
</div>
<div class="editor-field">
<asp:FileUpload ID="file" runat="server" />
</div>
<div class="editor-label">
<%: Html.LabelFor(model => model.Main) %>
</div>
<div class="editor-field">
<%: Html.CheckBoxFor(model => model.Main) %>
<%: Html.ValidationMessageFor(model => model.Main) %>
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
<% } %>
<div>
<%: Html.ActionLink("Back to List", "Index") %>
</div>
Mise à jour: J'ai vérifié et la collection est remplie avec les champs appropriés, mais ils sont tous Nulled.
Juste une copie droite et coller avec votre code html et - avec un modèle contenant uniquement Description et principal - il fonctionne très bien. Le problème peut exister en dehors de ce fichier particulier. Vous utilisez un contrôle ASP: FileUpload. Essayez de le remplacer par une entrée. Cependant, vous devrez supprimer la balise
Sans le contrôle FileUpload cela fonctionne très bien. Je n'ai pas besoin d'enlever la balise
Eh bien, la raison pour laquelle j'ai demandé à propos de la balise de formulaire est parce qu'un nouveau projet avec la balise asp: FileUpload génère une erreur qui nécessite la balise form avec runat = server ... donc basé sur le fait qu'une balise de formulaire existe sûrement quelque part. – Buildstarted