2012-11-01 14 views
8

Sto scrivendo una piccola applicazione con mvc4 e Entity Framework 5.Entity Framework 5 codice prima di aggiungere un'immagine

Voglio aggiungere un prodotto e negozio e l'immagine del prodotto.

Ho un modello

[Table("CatalogItem")] 
public class CatalogItemModel 
{ 
    [Key] 
    public int CatalogItemId { get; set; } 

    public string Description { get; set; } 

    public double Price { get; set; } 

    public int ProductCount { get; set; } 

    public string Size { get; set; } 

    public string Sku { get; set; } 

    [Column(TypeName = "image")] 


    public byte[] Image { get; set; } 

    [Display(Name = "Display Catalog Item")] 
    public bool DisplayItem { get; set; } 
} 

mio controller. Questo non viene mai colpito.

[HttpPost] 
    public ActionResult Create(CatalogItemModel catalogitemmodel) 
    { 
     if (ModelState.IsValid) 
     { 
      db.CatalogItemModels.Add(catalogitemmodel); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(catalogitemmodel); 
    } 

Le mie opinioni sono

<fieldset> 
    <legend>CatalogItemModel</legend> 

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

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

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

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

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

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

    <input name="Image" type="file"/> 
    <p> 
     <input type="submit" value="Create" /> 
    </p> 
</fieldset> 

Quando provo la pubblicazione di un nuovo catalogo con un'immagine nel mio file di input tuttavia genera un errore

L'ingresso non è una valida Base- 64 stringa poiché contiene un carattere non base di 64, più di due caratteri di riempimento o un carattere non valido tra i caratteri di riempimento.

+0

È possibile aggiungere il codice in cui si assegna l'immagine? –

+0

@NickW ha appena aggiunto l'azione del controller. Ho aggiunto un punto di interruzione, ma non viene mai colpito –

+0

Che dire di 'catalogitemmodel'? Come viene creato questo? Se il tuo punto di interruzione non viene colpito, il problema è precedente. –

risposta

9

tentare di risolvere così:

1. Sostituire

<input name="Image" type="file"/> con <input name="ImageFile" type="file"/>

2. Nel controller:

 [HttpPost] 
     public ActionResult Create(CatalogItemModel catalogitemmodel, HttpPostedFileBase ImageFile) 
     { 
      using (var ms = new MemoryStream()) 
      { 
       ImageFile.InputStream.CopyTo(ms); 
       catalogitemmodel.Image = ms.ToArray(); 
      } 

      if (ModelState.IsValid) 
      { 
       db.CatalogItemModels.Add(catalogitemmodel); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 

      return View(catalogitemmodel); 
     } 
+0

grazie a @testCoder tuttavia ImageFile viene sempre restituito come null. Ho controllato che l'ortografia sia corretta, ma nessuna gioia –

+0

usando var files = Request.Files Sono stato in grado di ottenere l'immagine –

+3

DiverDan non dimenticarlo: @using (Html.BeginForm (null, null, FormMethod.Post, new { enctype = "multipart/form-data"})) – testCoder

Problemi correlati