JQuery Ajax stops working after adding .submit(function() { } -


the original issue jquery ajax won't call succuess after hitting c# method. looking @ similar issue here: jquery ajax not returning success see solution add:

$(parentform).submit(function(event) {     event.preventdefault();` 

however, after doing this, ajax code doesn't seem execute. hit js function though, stops before executes ajax code.

my html code looks this:

@{     const string formid = "parentform"; }  @using (html.beginform("editchannel", "channel", formmethod.post, new { id = formid }))     {         html.renderpartial("editchannelform", model);         <br /><br />      <input type="button" value="save" onclick="editchannel('@model.channelviewmodel.id', @formid)" />      } 

i submit form in js code (when button above clicked) looks this:

function editchannel(channelid, parentform) {   $(parentform).submit(function(event) {       event.preventdefault();       $.ajax({           url: "/channel/editchannel/",           type: "post",           cache: false,           data: {               id: channelid,               updatedmodel: parentform           },           success: function(msg) {               alert("msg: " + msg);               if (msg === "changeofsensitivedata") {                   showalertonchangeofsensitivedata('sensitivdatamsgdiv');               } else {                   alert("else");               }           },           error: function(msg) {               alert("error");           }       });   }); } 

i hit js function, ajax never executes, , therefore not calling c# method. if this:

function editchannel(channelid, parentform) {     $(parentform).submit()      ... 

then ajax code executes , hits c# method, never hits success function.

the c# looks this:

[httppost] public actionresult editchannel(int id, channelandlocationviewmodel updatedmodel) {     updatedmodel.locationitemviewmodels = getlocationitems();                  if (modelstate.isvalid)     {         channelmodel channel = null;         using (var context = new maanegriscontext())         {             var oldunit = context.channels.where(c => c.id == id).select(c => c.unit).singleordefault();             var newunit = updatedmodel.channelviewmodel.unit;              if (oldunit != null && !oldunit.equals(newunit))             {                 return content("changeofsensitivedata");             }             ... 

you current code passing models channelviewmodel.id value , string value "parentform" editchannel() method, passes string controllers editchannel() method. parameter updatedmodel complex object of type channelandlocationviewmodel cannot bound string binding fails , value of updatedmodel null.

remove onclick attribute , change button to

<input type="button" id="save" value="save" /> 

then modify script to

var url = '@url.action("editchannel", "channel")'; var channelid = '@model.channelviewmodel.id $('#save').click(function() {   // serialize form , add additional parameter   var data = $('form').serialize() + '&' + $.param({ id: channelid });   $.post(url, data, function(msg) {     alert("msg: " + msg);     ....   }); }); 

alternatively, include @html.hiddenfor(m => m.channelviewmodel.id) in view , use var data = $('form').serialize() value channelviewmodel.id included in post , int id parameter not required in controller method (it bound in updatedmodel parameter).


Comments

Popular posts from this blog

jquery - How do you format the date used in the popover widget title of FullCalendar? -

asp.net mvc - SSO between MVCForum and Umbraco7 -

Python Tkinter keyboard using bind -