2012-05-01 30 views
39

Tengo un formulario de carga y quiero pasar mi información tales como una imagen y algún otro campo, pero no sé cómo puedo subir I Imagen ..de carga de imágenes en ASP.NET MVC

esta es mi código del controlador:

[HttpPost] 
     public ActionResult Create(tblPortfolio tblportfolio) 
     { 
      if (ModelState.IsValid) 
      { 
       db.tblPortfolios.AddObject(tblportfolio); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(tblportfolio); 
     } 

y este es mi código de la vista:

@model MyApp.Models.tblPortfolio 

<h2>Create</h2> 

@using (Html.BeginForm(null, null, FormMethod.Post, new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>tblPortfolio</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Title) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Title) 
      @Html.ValidationMessageFor(model => model.Title) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.ImageFile) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.ImageFile, new { type = "file" }) 
      @Html.ValidationMessageFor(model => model.ImageFile) 
     </div> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.Link) 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Link) 
      @Html.ValidationMessageFor(model => model.Link) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

Ahora bien, no sé cómo puedo subir imagen y se guarda en el servidor .. ¿Cómo puedo establecer nombre de la imagen por Guid.NewGuid(); ? ¿O cómo puedo configurar la ruta de la imagen?

+2

¿Cuál es el tipo de 'model.ImageFile'? – Shimmy

+0

@Shimmy: Acabo de guardar el nombre de la imagen en la base de datos. es una cuerda. –

+0

Terminé generando un GUID para cada nueva imagen y guardando su nombre en la base de datos. La carpeta no se guarda en el servidor, solo el nombre del archivo de imagen. La carpeta se inyecta dinámicamente. – Shimmy

Respuesta

44

En primer lugar, tendrá que cambiar la vista para incluir lo siguiente:

<input type="file" name="file" /> 

A continuación, tendrá que cambiar su puesto ActionMethod tomar un HttpPostedFileBase, así:

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio, HttpPostedFileBase file) 
{ 
    //you can put your existing save code here 
    if (file != null && file.ContentLength > 0) 
    { 
     //do whatever you want with the file 
    } 
} 
+1

utilizo el código y creo que funciona correctamente pero me muestro un error: acceso a la ruta 'C: \ Users \ Se ha denegado el administrador \ Desktop \ ND \ MyApp \ MyApp \ Uploads. Sabes por qué ? ¿Por qué me muestra este error en local? –

+1

Hmmm, debe averiguar desde el grupo de aplicaciones para el sitio web cuál es la identidad con la que se está ejecutando (de manera predeterminada, es la identidad del grupo de aplicaciones) y otorgarle los permisos correctos. – mattytommo

+1

Cambio de mi identidad de grupo de aplicaciones al sistema local ... En algún lugar me refiero a esto, debo cambiarlo a un sistema local pero no funciona ... ¿Alguna sugerencia? –

3

Puede obtenerlo desde Request usando Request.Files Colección, En caso de carga de un solo archivo, lea del primer índice usando Request.Files[0]:

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio) 
{ 
if(Request.Files.Count > 0) 
{ 
HttpPostedFileBase file = Request.Files[0]; 
if (file != null) 
{ 
    // business logic here 
} 
} 
} 

En el caso de los archivos de carga múltiple, que tiene que recorrer en el Request.Files colección:

[HttpPost] 
public ActionResult Create(tblPortfolio tblportfolio) 
{ 
for(int i=0; i < Request.Files.Count; i++) 
{ 
    HttpPostedFileBase file = Request.Files[i]; 
    if (file != null) 
    { 
    // Do something here 
    } 
} 
} 

Si desea cargar el archivo sin recargar la página a través de AJAX continuación, puede utilizar this article which uses jquery plugin

Cuestiones relacionadas