C'è un modo per definire i controlli di caricamento del file utilizzando un helper Razor in ASP.NET MVC3?Controlli caricamento file tramite Razor in ASP.NET MVC3
risposta
Non c'è un aiuto html per gli ingressi dei file, ma ciò che è sbagliato con solo facendo
@using (Html.BeginForm("Action", "Controller", FormMethod.Post, new {enctype = "multipart/form-data"})) {
<input type='file' name='blah' id='blah' />
}
C'è una classe FileUpload in Microsoft.Web.Helpers ... http://msdn.microsoft.com/en-us/library/microsoft.web.helpers.fileupload(v=vs.99).aspx
La migliore/L'unico modo che ho trovato per ottenerlo è l'utilizzo di NuGet in VisualStudio. Cerca il pacchetto "microsoft-web-helpers" nel repository online. C'è un problema che ho incontrato, tuttavia. Una delle dipendenze del pacchetto è Facebook.Helper, che verrà installato nello stesso momento. Inserirà un file chiamato "Facebook ???. Cshtml" (dimenticato il nome esatto) nella directory AppCode del progetto. Il problema è che Facebook ???. Cshtml aveva alcune dipendenze di WebMatrix che non avevo e non volevo installare. Semplicemente cancellando il file Facebook.cshtml (che non avrei mai usato, comunque) sembrava risolvere il problema. Successivamente, sono stato in grado di compilare e eseguire il debug come al solito e utilizzare la classe FileUpload.
Ecco un tutorial ho scoperto che lo utilizza:
http://blog.tallan.com/2011/02/04/using-mvc3-razor-helpers-and-jcrop-to-upload-and-crop-images/
Quel tutorial è OK, ma non spiega chiaramente quale codice va dove. Suggerirei questo invece dato che si tratta solo di caricare i file (non ridimensionando le immagini): http://blogs.planetcloud.co.uk/mygreatdiscovery/post/Creating-a-multiple-file-upload-form-in -ASPNET-MVC.aspx – Pauk
Il collegamento di Pauk ha ceduto il passo al bitrot. Ecco un [Wayback link] (http://web.archive.org/web/20150712030605/http://blogs.planetcloud.co.uk:80/mygreatdiscovery/post/Creating-a-multiple-file-upload-form -in-ASPNET-MVC.aspx) – jpaugh
UTILIZZO RAZOR
@*requieres installing Asp helpers/you can do it her from NuGet or logging som admin in packages*@
@using Microsoft.Web.Helpers;
@{
var fileName = "";
if (IsPost) {
var fileSavePath = "";
var uploadedFile = Request.Files[0];
fileName = Path.GetFileName(uploadedFile.FileName);
fileSavePath = Server.MapPath("~/UploadedFiles/" +
fileName);
uploadedFile.SaveAs(fileSavePath);
}
}
@FileUpload.GetHtml(
initialNumberOfFiles:1,
allowMoreFilesToBeAdded:false,
includeFormTag:false,
name: "Upload1",
uploadText:"Upload")
@if (IsPost) {
<span>File uploaded!</span><br/>
}
Nessuno di questo login 'IsPost' dovrebbe essere nella vista, tutto appartiene al controller, idealmente diviso tra due metodi, uno dei quali con il decoratore' [HttpPost] '. –
Nessun cliente convalida lato, fuori dalla scatola. –
Non batte niente fuori dalla scatola – Jimmy
'' FilePath viene fornito come nome della proprietà del modello, quindi puoi usarlo come qualsiasi altro controllo. – PAVITRA