c# - Ajax.BeginForm posts to surface controller and updates target id with full page instead of partial view -
have been trying member profile management area working ajax each section of page hidden within show hide div.
i have used ajax before in mvc applications have never used umbraco surface controllers before. i'm unsure why returning partial view in controller outputting whole page , not partial view giving it.
controller:
[httppost] [actionname("mvcmembereditprofiledetails")] public actionresult mvcmembereditprofiledetails(mvcmembereditprofiledetailsmodel model) { var memberservice = services.memberservice; var currentuser = membership.getuser(); var member = memberservice.getbyemail(currentuser.email); bool result = false; if (modelstate.isvalid) { ... } if (result) { ... } return partialview("mvcmembereditprofiledetails", model); }
view:
@model umbraco714.models.mvcmembereditprofiledetailsmodel @using (ajax.beginform("mvcmembereditprofiledetails", "mvcmember", new ajaxoptions() { httpmethod = "post", updatetargetid = "mvcmembereditprofiledetails", insertionmode = insertionmode.replace })) { if (model.result != null) { if (model.result == true) { <div id="result" class="alert alert-success"> @html.raw(model.resultmessage) </div> } else { <div id="result" class="alert alert-danger"> @html.raw(model.resultmessage) </div> } } <div class="form-default"> <div class="row"> <div class="col-md-6"> <div class="form-group"> @html.labelfor(m => m.firstname) @html.textboxfor(m => m.firstname) @html.validationmessagefor(m => m.firstname) </div> </div> <div class="col-md-6"> <div class="form-group"> @html.labelfor(m => m.lastname) @html.textboxfor(m => m.lastname) @html.validationmessagefor(m => m.lastname) </div> </div> <div class="col-md-6"> <div class="form-group"> @html.labelfor(m => m.companyname) @html.textboxfor(m => m.companyname) @html.validationmessagefor(m => m.companyname) </div> </div> <div class="col-md-6"> <div class="form-group"> @html.labelfor(m => m.companyposition) @html.textboxfor(m => m.companyposition) @html.validationmessagefor(m => m.companyposition) </div> </div> <div class="col-xs-12"> <div class="form-group"> @html.labelfor(m => m.companybio) <span class="bs-tooltip" data-toggle="tooltip" data-placement="top" title="max 1000 characters long"><i class="fa fa-info-circle" aria-hidden="true"></i></span> @html.textareafor(m => m.companybio, new { @rows = "4", @maxlength = "1000" }) @html.validationmessagefor(m => m.companybio) </div> @tempdata["status"] <div class="form-group nomargin"> <div class="text-right"> <button class="button" type="submit"><i class="fa fa-floppy-o" aria-hidden="true"></i> update</button> </div> </div> </div> </div> </div> }
i have needs included (as far i'm aware) before form , there no console errors.
<script src="/scripts/jquery.js"></script> <script src="/scripts/bootstrap.min.js"></script> <script src="/scripts/jquery-val.js"></script> <script src="/scripts/jquery.unobtrusive-ajax.min.js"></script>
i have made sure unobtrusivejavascriptenabled set true in web.config i'm still getting full page rendered when post form.
initially: when page loads , form shows
after: when form submitted , correct partial view returned inside of entire
feeling pretty dumbfounded i've spent more couple of hours looking though it's working in sort of way.
is possible / known thing happen? searched around couldn't find topics similar issue, unless wording things wrong.
just looking nudge in right direction if has ideas?
umbraco can funny partials. try returning currentumbracopage() in controller.
as message, use tempdata lasts 1 request, rather model.
Comments
Post a Comment