Comment écrire «Html.BeginForm» dans Razor

Si j’écris comme ça:

form action = “Images” method = “post” enctype = “multipart / form-data”

Ça marche.

Mais dans Razor avec ‘@’, ça ne marche pas. Ai-je commis des erreurs?

@using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) 
Select a file
}

Mon contrôleur ressemble à ceci:

 [AcceptVerbs(HttpVerbs.Post)] public ActionResult Upload() { foreach (ssortingng file in Request.Files) { var uploadedFile = Request.Files[file]; uploadedFile.SaveAs(Server.MapPath("~/content/pics") + Path.GetFileName(uploadedFile.FileName)); } return RedirectToAction ("Upload"); } 

Le code suivant fonctionne correctement:

 @using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) 
Select a file
}

et génère comme prévu:

 
Select a file

D’un autre côté, si vous écrivez ce code dans le contexte d’une autre construction côté serveur, telle que if ou foreach vous devez supprimer le @ avant l’ using . Par exemple:

 @if (SomeCondition) { using (Html.BeginForm("Upload", "Upload", FormMethod.Post, new { enctype = "multipart/form-data" })) { @Html.ValidationSummary(true) 
Select a file
} }

En ce qui concerne votre code côté serveur, voici comment procéder :

 [HttpPost] public ActionResult Upload(HttpPostedFileBase file) { if (file != null && file.ContentLength > 0) { var fileName = Path.GetFileName(file.FileName); var path = Path.Combine(Server.MapPath("~/content/pics"), fileName); file.SaveAs(path); } return RedirectToAction("Upload"); }