2012-11-01 16 views
8

piszę bardzo małą aplikację z mvc4 i Entity Framework 5.Entity Framework 5 Kod pierwszy dodając zdjęcie

Chcę dodać produkt i sklep i wizerunku dla tego produktu.

Mam modelu

[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; } 
} 

mojego kontrolera. To nigdy nie zostaje trafione.

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

     return View(catalogitemmodel); 
    } 

Moje poglądy tworzą

<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> 

Przy próbie opublikowania nowy katalog z obrazem w moim pliku wejściowego jednak zgłasza błąd

Wejście nie jest poprawnym Base- 64 ciąg znaków, ponieważ zawiera 64-znakowy znak bazowy, więcej niż dwie litery dopełniające lub niedozwolony znak wśród znaków dopełniających.

+0

Czy możesz dodać kod, do którego przypisujesz obraz? –

+0

@NickW właśnie dodał działanie kontrolera. Dodałem punkt przerwania, ale nigdy nie zostanie trafiony –

+0

Co z 'catalogitemmodel'? Jak to się tworzy? Jeśli punkt przerwania nie zostanie trafiony, problem jest wcześniejszy. –

Odpowiedz

9

spróbować naprawić tak:

1. Wymienić

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

2. W kontrolerze:

 [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

dzięki @testCoder jednak ImageFile jest zawsze zwracana jako null. Sprawdziłem, czy pisownia jest poprawna, ale nie ma radości. –

+0

używanie var files = Request.Files Udało mi się uzyskać obrazek –

+3

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

Powiązane problemy