2012-07-19 5 views
0

행운을 빌어 2 일 동안 내 문제에 대한 해결책을 찾기 위해 인터넷 검색을 해왔습니다. MVC3 .NET의 어떤 별들도 도움이 될 수 있습니까?데이터베이스에 저장된 이미지를 업데이트 할 수 없습니다.

데이터베이스에 저장된 이미지를 업데이트하기 위해 .NET MVC3 응용 프로그램을 빌드하려고합니다. 여기

@model JackLing.Models.myImage 

    @{ 
     ViewBag.Title = "Edit"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 

    <h2>Edit</h2> 

    <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
    <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

    @using (Html.BeginForm("Edit", "Image",FormMethod.Post, new { enctype = "multipart/form-data" })){ 
     @Html.ValidationSummary(true) 
     <fieldset> 
      <legend>myImage</legend> 
      @Html.EditorForModel(); 

      <div class="editor-label">Image</div> 
      <div class="editor-field"> 
      @if (Model.Data != null) 
      { 
      <img src="@Url.Action("show", new { id = Model.imageID })" height="150" width="150" /> 
      } 
      else { 
      @:None 
      } 
      </div> 

      <p> 
       <span>Choose a new file</span> <input type="file" name="imgFile"/> 
      </p> 

      <p> 
       <input type="submit" value="Save" /> 
      </p> 

     </fieldset> 
    } 

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

액션 메소드 여기

[HttpPost] 
    public ActionResult Edit(myImage img, HttpPostedFileBase imageFile) 
    { 
     //var img = (from imga in db.myImages 
     //    where imga.imageID == id 
     //   select imga).First(); 
     if (ModelState.IsValid) 
     { 
      if (img != null) 
      { 
       img.imageType = imageFile.ContentType; 
       img.Data = new byte[imageFile.ContentLength]; 
       imageFile.InputStream.Read(img.Data, 0, imageFile.ContentLength); 
      } 
      // save the product 
      UpdateModel(img); 
      db.SubmitChanges(); 
      return RedirectToAction("Index"); 
     } 
     else 
     { 
      // there is something wrong with the data values 
      return View(img); 
     } 
    } 

이다 나는 그것이라는 오류가 발생합니다 응용 프로그램 실행하면 "개체 참조가 개체의 인스턴스로 설정되지 않았습니다를."

문제를 해결하는 방법에 대한 제안이 있습니다. 그건 그렇고, 생성 및 세부 방법은 모두 작동합니다. 데이터 바인딩과 관련이 있다고 생각하지만 확실하지 않습니다 ... 해결 방법이 없습니다.


마지막 Eulerfx 의 조언에 따라 문제를 해결 여기에 작업 활동입니다.

[HttpPost] 
     public ActionResult Edit(myImage img, HttpPostedFileBase imageFile) 
     { 
      myImage imgToSave = (from imga in db.myImages 
          where imga.imageID == img.imageID 
         select imga).First(); 



      if (ModelState.IsValid) 
      { 
       if (img != null) 
       { 
        imgToSave.imageType = imageFile.ContentType; 
        var binaryReader = new BinaryReader(imageFile.InputStream); 
        imgToSave.Data = binaryReader.ReadBytes(imageFile.ContentLength); 
        binaryReader.Close(); 
       } 


       TryUpdateModel(imgToSave); 

       db.SubmitChanges(); 

       return RedirectToAction("Index"); 
      } 
      else 
      { 
       // there is something wrong with the data values 
       return View(img); 
      } 
     } 
+0

GET 동작을 표시 할 수 있습니까? –

+0

그리고 어떤 코드 라인이 "Object reference"오류를 던지고 있습니까? – MikeTWebb

+0

답장을 보내 주셔서 감사합니다. 여기에 GET 액션 공공 ActionResult 편집은 (INT 아이디) { myimage을 마일 = (db.myImages 에서 IMG의 경우 img.imageID == ID 선택 IMG) 좁은 방(); 돌아 가기보기 (mi); } –

답변

0

문제는 HTML 파일의 입력 필드의 이름 imgeFile이고 MVC에서 파일 파라미터의 이름 imageFile이라고 할 수있다. 입력 필드 이름과 조치 메소드 매개 변수 이름이 일치하는지 확인하십시오.

+0

고마워요! 나는 곧 결과를 알리려고 노력할 것입니다! 체로! –

+0

오류는 실제로 입력 필드 이름으로 인해 발생합니다. imageFile로 변경되어 오류 메시지가 사라졌습니다. 그러나 이미지는 아직 업데이트되지 않은 채로 남아있을 것입니다 ... 아마도 최종 솔루션에서 한 걸음 떨어져있을 것입니다. 어떤 생각을 고칠 수 있을까요? 미리 감사드립니다! MVC3은 일을 더 어렵게 만들거나 더 쉽게합니까? –

+0

업데이트 할 데이터베이스 엔티티를로드하지 않는 것 같습니다. 대신 myImage img는 아무 것도 저장되지 않는 이유를 설명하는 바인딩 매개 변수입니다. – eulerfx

관련 문제