2015-10-19 2 views
0

Я пытаюсь сделать цикл foreach, который принимает все изображение, когда я отлаживаю код, я вижу, что он принимает образы, но не все отправляются в базу данных. Если я выберу 3 изображения, то в базе данных будет всего 2, а третий - только путь, но не изображение.Проблема с контуром foreach через изображение

Может кто-нибудь мне помочь.

Вот мой код в моем фото модели:

public class Photo 
{ 
    public int PhotoId { get; set; } 

    public String ProfileImagePath { get; set; } 

    public int StudentId { get; set; } 

    public virtual Student Student { get; set; } 

    public void SaveImage(HttpPostedFileBase image, 
     String serverPath, String pathToFile) 
    { 
     if (image == null) return; 

     string filename = Guid.NewGuid().ToString(); 
     ImageModel.ResizeAndSave(
      serverPath + pathToFile, filename, 
      image.InputStream, 200); 

     ProfileImagePath = pathToFile + filename + 
     ".jpg"; 
    } 


} 

И вот мой код контроллера:

[HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Create([Bind(Include = "StudentId,Name,Adress")] Student student, 
     HttpPostedFileBase[] image) 
    { 
     if (ModelState.IsValid) 
     { 


      foreach (HttpPostedFileBase file in image) 
      { 

       string filePathToSave = "/ProfileImages/"; 
       photo.SaveImage(file, HttpContext.Server.MapPath("~"), "/ProfileImages/"); 
       photo = new Photo 
       { 
        StudentId = student.StudentId, 
        Student = student, 
        ProfileImagePath = filePathToSave 
       }; 
       db.Photos.Add(photo); 
      } 
      db.Students.Add(student); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     return View(student); 
    } 
+1

Что-то не так с кодом, который вы указали. Вы вызываете 'photo.SaveImage (..)' перед тем, как объявили 'photo = new Photo()', чтобы исключить. И поскольку 'SaveImage()' устанавливает значение свойства ProfileImagePath', почему вы затем снова устанавливаете его (для другого значения) с помощью 'ProfileImagePath = filePathToSave'? –

ответ

2

Вы не показали правильный код (то, что вы проявили сгенерирует исключение), поэтому я предполагаю, что вы должны быть объявлены

Photo photo = new Photo(); 

где-то до вашего photo.SaveImage(..) которая, вероятно, будет источником ошибки. Кроме того, ваш photo.SaveImage() устанавливает значение ProfileImagePath (сказать .../ProfileImages/someGuid.jpg), но тогда вы перезаписать его и заменить его только /ProfileImages/ при вызове ProfileImagePath = filePathToSave

Изменение вы код

var path = HttpContext.Server.MapPath("~/ProfileImages"); // only need to set this once 
foreach (HttpPostedFileBase file in image) 
{ 
    Photo photo = new Photo 
    { 
     StudentId = student.StudentId, // no need to set the Student property 
    }; 
    photo.SaveImage(file, path); // this will set the ProfileImagePath property 
    db.Photos.Add(photo); 
} 

и SaveImage() способу

public void SaveImage(HttpPostedFileBase image, string path) 
{ 
    if (image == null) return; 
    string filename = string.Format("{0}.jpg", Guid.NewGuid()); 
    // not sure what the following line does to it may also need to be modified? 
    ImageModel.ResizeAndSave(path, filename, image.InputStream, 200); 
    ProfileImagePath = Path.Combine(path, filename); 
} 

Я бы, однако, рассмотреть вопрос о переходе на метод SaveImage() из Photo класса и в отдельную службу, тем более что она вызывает статический метод в другом классе.

+0

Благодарим за помощь – tinaw25

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