2016-10-30 19 views
0

Jqueryの助けを借りて画像をアップロードしようとしています。しかし、私は何かを逃しているようだ。私は、[作成]ボタンをクリックすると今画像アップロードEF、MVC、JQueryでアップロード

[HttpGet] 
[LogInFilter] 
public PartialViewResult ImageCreate() //Insert PartialView 
{ 
    return PartialView(new GarhwalBhawan.Models.ImageTbl()); 
} 

[HttpPost] 
[LogInFilter] 
public JsonResult ImageCreate(GarhwalBhawan.Models.ImageTbl ImgObj, HttpPostedFileBase file) // Record Insert 
{ 
    if (ModelState.IsValid) 
    { 
     if (file != null) 
     { 
      file.SaveAs(HttpContext.Server.MapPath("~/Image/") + file.FileName); 
      ImgObj.Image = file.FileName; 
     } 

     db.ImageTbls.Add(ImgObj); 
     db.SaveChanges(); 
     myMessage = "Success"; 
    } 

    else 
    { 
     myMessage = "Failed"; 
    } 
    return Json(myMessage, JsonRequestBehavior.AllowGet); 
}  

- :私はGETとPOSTのための2つの結果をした私のコントローラで

$(document).ready(function() { 
    $('#ImageSave').click(function() { 
     var Image = $("#File").val(); 
     var Alt = $("#Alt").val(); 
     var ImgGroup = $("#ImgGroup").val(); 
     var Year = $("#Year").val(); 
     var Description = $("#Description").val(); 

     var ImgID = { 
      "Image": Image, "Alt": Alt, 
      "ImgGroup": ImgGroup, "Year": Year, "Description": Description 
     }; 
     $.post("/Admin/ImageCreate", ImgID, 
     function (data) { 
      if (data == "Success") { 
       alert('Image Added Successfully!!'); 
      } 
      else if (data == "Failed") { 
       alert('Image Not Added!! Please Fill all Details or Contact Support') 
      } 

      else { 
       alert(data); 
      } 
     }, 'json'); 

    }); 
}); 

@using (Html.BeginForm(new { enctype = "multipart/form-data" })) 
{ 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend></legend> 
     <div class="editor-label"> 
      Image Group 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.ImgGroup) 
      @Html.ValidationMessageFor(model => model.ImgGroup) 
     </div> 
     <div class="editor-label"> 
      Year 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Year) 
      @Html.ValidationMessageFor(model => model.Year) 
     </div> 
     <div class="editor-label"> 
      Description 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Description) 
      @Html.ValidationMessageFor(model => model.Description) 
     </div> 
     <div class="editor-label"> 
      Image 
     </div> 
     <div> 
      <input id="File" title="Upload an image" type="file" name="file" class="btn btn-info" /> 
      @Html.ValidationMessageFor(model => model.Image) 
     </div> 
     <div class="editor-label"> 
      Alternative Description 
     </div> 
     <div class="editor-field"> 
      @Html.EditorFor(model => model.Alt) 
      @Html.ValidationMessageFor(model => model.Alt) 
     </div> 
     <p> 
      <input id="ImageSave" type="button" value="Create" /> 
     </p> 
    </fieldset> 
} 

- :私の見解で、私はこれをしました。レコードは「C:\ fakepath \ 22012012014.jpg」という匿名パスで保存され、デバッガはfile.saveasに保存中にファイルがないことを示します。私はエラーを理解することはできません。

+0

あなたは、AJAXを使用してファイルを投稿する 'FormData'を使用する必要があります - 参照してください。[この答え](のhttp://のstackoverflow。 com/questions/29293637/how-to-append-model-to-formdata-and-in-mvc/29293681#29293681) –

+0

私は少し迷っています。 Html.BeginForm()でそれを行う方法。また、$ .ajaxに変更したくない場合は、現在のコンテキスト、つまり$ .postメソッドで行うことができますか? – Deepak

+0

あなたはどういう意味ですか? '$。post()'は '$ .ajax()'のショートカットです。私がリンクしている答えを読んでください。あなたは 'FormData'を使う必要があり、あなたは正しいAjaxオプションを設定する必要はありません –

答えて

1

あなたがアップロードされたファイルからパスなしでファイル名のみを抽出する必要があります。

var fileName = Path.GetFileName(file.FileName); 
file.SaveAs(HttpContext.Server.MapPath("~/Image/") + fileName);