I am developing a website in MVC 4, where user fill some information and save it to upload. all the information except image is being saved on server using Javascript, Json and Ajax, like given below:
$.ajax({
url: action,
type: "POST",
data: JSON.stringify(PostViewModel),
dataType: "json",
contentType: "application/json; charset=utf-8",
beforeSend: function () {
},
success: function (data) {
try{
alert('success');
}catch(err){alert(' Error: '+err);}
},
complete: function () {
},
error: function (xhr, ajaxOptions, thrownError) {
alert("Error occured");
}
});
But Now I need to upload his image also, but I couldn't find any method that can work with this approach or any without post back.
I know putting FileUpload Control in Form tag and on press of submit button i can get image file like as given below:
HttpPostedFileBase photo = Request.Files["photo"];
if (photo != null)
{
Session["ImgPath"] = "~/Content/PostImages/" + photo.FileName;
string path = Server.MapPath("~/Content/PostImages/");
photo.SaveAs(path + photo.FileName);
}
But for this method I'll have to change my approach of saving content (using Javascript, Json & Ajax) which I can't.
Please help
Thanks.
There are two ways to post files (images) asynchronously If your target browsers support file api, you can use the following: HTML:
JavaScript
or you can use swf tools like uploadify
HTML Code
Javascript Code
Code in MVC controller
Try this its working for me
I personally don't prefer to use any kind of third party tool other than java script, css or html. I will go with first approach shown by UmairP. But if you want to spare your self for writting to much of a code. Here is a nice plugin of jquery.
And also there is a demo for asp.net mvc with this plugin.
Please have a look. Let me know if any further information needed.