2015-06-22 2 views
-1

Я не могу загрузить изображение в своем приложении MVC. Кто-нибудь знает, как я могу исправить эту ошибку?Не удается загрузить изображения в ASP.NET MVC4

Модель Image: вид

namespace HelloWorld.Models 
{ 
    public class Image 
    { 
     [Required] 
     [DataType(DataType.MultilineText)] 
     public string ImagePath { get; set; } 

     public int ImageId { get; set; } 
    } 
} 

индекс:

@model IEnumerable<HelloWorld.Models.Image> 

@{ 
    ViewBag.Title = "Index"; 
} 

<p> 
    @Html.ActionLink("Create New", "Create") 
</p> 

@foreach (var item in Model) { 
    <img src="@Html.DisplayFor(modelItem => item.ImagePath)"> 
} 

Создать вид:

@model HelloWorld.Models.Image 
@{ 
    ViewBag.Title = "Create"; 
} 

<form method="post" action="@Url.Action("Create", "Images")"> 
    <div> 
     <h4>Image</h4> 
     <hr /> 

     <input type="file" name="file"> 
     <input type="submit" value="Upload"> 
    </div> 
</form> 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 

Создать действие:

[HttpPost] 
     public ActionResult Create(Image img, HttpPostedFileBase file) 
     { 
      if (ModelState.IsValid) 
      { 
       if (file != null) 
       { 
        file.SaveAs(HttpContext.Server.MapPath("../../Content/img/upload/") + file.FileName); 
        img.ImagePath = file.FileName; 
       } 
       db.Images.Add(img); 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return RedirectToAction("Create","Images"); 
     } 

Я думаю, что моя проблема в том, что у меня есть модель состояние не действует. Потому что у меня есть RedirectToAction («Создать», «Изображения»);

+2

какую ошибку вы получаете? – user1666620

+2

Установите точку останова на '' '' 'и проверьте ошибки' ModelState'. –

+0

Состояние модели недействительно. Я перенаправляюсь на создание действия. – Geronimo

ответ

1

Когда вы отправляете файлы, вам необходимо включить в форму формуляр multipart/form-data.

<form method="post" action="@Url.Action("Create", "Images")" enctype="multipart/form-data"> 
    <div> 
     <h4>Image</h4> 
     <hr /> 

     <input type="file" name="file"> 
     <input type="submit" value="Upload"> 
    </div> 
</form> 

Update

Создать модель представления для файла

public class FileViewModel 
{ 
    [Required] 
    public HttpPostedFileBase file { get; set; } 
} 

Затем обновить свои действия следующим образом

[HttpPost] 
    public ActionResult Create(FileViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 

      var image = new Image(); 

      model.SaveAs(HttpContext.Server.MapPath("../../Content/img/upload/") + model.FileName); 
      image.ImagePath = model.FileName; 

      db.Images.Add(image); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return RedirectToAction("Create", "Images"); 
    } 
+0

Извините, но это не работает. – Geronimo

+0

Я только что прочитал ваши комментарии - ваш ModelState недействителен, потому что вы не передаете какие-либо данные модели. Вам требуется ImagePath, но вы его не предоставляете. Похоже, вам даже не нужен объект Image в качестве параметра. Просто инициализируйте его в своем действии – heymega

+0

@Geronimo Я обновил свой ответ. Я удалил класс Image из параметра действия и проиндексировал его внутри действия. Кроме того, я создал отдельную модель просмотра для вашего файла. – heymega

Смежные вопросы