c# - Ajax postback partialview not getting loaded with updated image -
i trying create sample mvc4 webpage partialviews
on parent page ,eg., index.cshtml page displaying partialview page allow user view/update profile photo
when index page loads ,i need partial page show photo if photo available
once page loaded ,when user uploads new photo,i need partialview page ajax postback , show new photo .
i able load page photo fetched db, able save new photo db clicking "#btnphotoupload" button. but after saving photo ,the partialview not getting refreshed automatically.please me how partialview page refesh , display updated photo.
here index page ie., "index.cshtml"
@model mvcsamples.models.viewmodels.userinfoviewmodel @{ viewbag.title = "ajax partial postback demo"; viewbag.userid = 1; } <h2>personalinfo example</h2> <div id="photoform"> @html.partial("_userphoto") </div> <div id="otherdetails"> @html.partial("_userdetails") </div>
here partialview, i.e. _userphoto.cshtml
@model mvcsamples.models.viewmodels.userinfoviewmodel @using (ajax.beginform("saveprofilephoto", "example", new { id = "1" }, new ajaxoptions { updatetargetid = "photoform", onsuccess = "onsuccess" }, new { enctype = "multipart/form-data" })) { @html.antiforgerytoken() @html.validationsummary(true) <a> <img id="imgphoto" width="100px" height="100px"/> <label for="photo">photo:</label> <input type="file" name="photo" id="photo" /> <input id="btnphotoupload" type="button" value="apply" /> </a> <script type="text/javascript"> $(document).ready(function () { $("#imgphoto").attr('src', "@url.action("getprofileimage", "example", new { id = viewbag.userid })"); $("#btnphotoupload").click(function (event) { //on-click code goes in here. event.preventdefault(); savephototodb(); }); function savephototodb() { var json; var data; $.ajax({ type: "post", url: "/example/saveprofilephoto", data: new formdata($("#form0").get(0)), datatype: "html", contenttype: false, processdata: false, success: saveitemcompleted(data), error: saveitemfailed }); } function saveitemcompleted(data) { $("#photoform").html(data); } function saveitemfailed(request, status, error) { } }); </script> }
here controller examplecontroller:
namespace mvcsamples.controllers { public class examplecontroller : controller { iuserdetails usr = new userdetails(); // get: /example/ [httpget] public actionresult index() { //usr.getprofilephoto(websecurity.getuserid(user.identity.name)); if (!string.isnullorwhitespace(user.identity.name)) { viewbag.userid = websecurity.getuserid(user.identity.name); } userinfoviewmodel model = new userinfoviewmodel(); model.genderlist = usr.fillgendertypesdropdownlist(); return view(model); } [httppost] public actionresult saveprofilephoto(httppostedfilebase photo, userinfoviewmodel model) { string path = @"c:\temp\"; if (photo != null) { model.userid = 1;//websecurity.getuserid(user.identity.name); viewbag.userid = model.userid; var binary = new byte[photo.contentlength]; photo.inputstream.read(binary, 0, photo.contentlength); userpicmodel upmodel = new userpicmodel(); upmodel.userphoto = binary; upmodel.userid = model.userid; usr.insertprofilephoto(upmodel); } return partialview("_userphoto", model); } public fileresult getprofileimage(int id) { byte[] barrimg = usr.getprofilephoto(id); return file(barrimg, "image/png"); } } }
update:
as @david tansey suggested ,i added code refresh image inside savecompleted(data).
function refreshimage() { $("#imgphoto").attr('src', function () { // datetime portion appended url avoids caching issues // , ensures fresh image loaded every time var d = new date(); return this.src + '?' + d.gettime(); }); }
but above code refreshing image after click upload button twice . need refresh image after $("#btnphotoupload").click
. suggestions?
i tried disabling cache @ controller no luck:
[outputcacheattribute(varybyparam = "*", duration = 0, nostore = true)]
i pretty sure problem browser caching image file , not 'perceive' need bring across wire again after upload new one.
look @ following post description of how attach dummy (yet dynamic) query string value prevent caching occuring. think approach solve problem.
asp.net mvc jquery filling image
hope helps.
Comments
Post a Comment