javascript - How can I respond to the click of a button (without a submission of the page) when I need to run server-side code? -
this sort of catch-22 asp.net (sharepoint) webpart/page. need respond button click, doing requires code client-side (jquery), because server-side/code-behind seems available "submit" process, , don't want submit page in scenario.
to more clear, can have button (an htmlbutton, more precise), , respond clicking without submitting form:
server-side (c#):
htmlbutton btnaddfoapalrow = null; . . . btnaddfoapalrow = new htmlbutton(); btnaddfoapalrow.attributes["type"] = "button"; btnaddfoapalrow.innerhtml = "+"; btnaddfoapalrow.id = "btnaddfoapalrow"; this.controls.add(btnaddfoapalrow); client-side (jquery):
$(document).on("click", '[id$=btnaddfoapalrow]', function (e) { ... script elided brevity }); this works fine.
i can on server side (in c#) "submit" button, so:
button btnsave = new button(); btnsave.text = "save"; btnsave.click += new eventhandler(btnsave_click); this.controls.add(btnsave); . . . private void btnsave_click(object sender, eventargs e) { . . . code elided brevity } but crux of problem need respond button click without submitting form, run code on server side. can fulfill first requirement in jquery (as shown above htmlbutton btnaddfoapalrow), need call c# code in response click - need carry out action on server side.
so question is: how can i, client-side code, "poke" server-side code "wake , call (some) function"?
maybe can update variable (hiddenfield) create in c# so:
hiddenfield pdfgenbtnclicked = null; . . . pdfgenbtnclicked = new hiddenfield(); pdfgenbtnclicked.id = "pdfgenbtnclicked"; pdfgenbtnclicked.value = "no"; this.controls.add(pdfgenbtnclicked); ...from jquery, so:
$(document).on("click", '[id$=btngeneratepdf]', function () { $('[id$=pdfgenbtnclicked]').val("yes"); }); ..and have code on server-side kick off calling of method:
if (pdfgenbtnclicked.value == "yes") { generatepdf(listoflistitems); } ...but how can cause (last) bit of code called? can put timer on page, , have check status of pdfgenbtnclicked.value every often? possible, goldberg-esque.
who has better idea?
update
theoretically (i think!) should work (non-ajax way indirectly run server-side code client-side code):
0) create timer
private timer tmr = null; 1) create "generate pdf" button , timer:
btngeneratepdf = new htmlbutton(); btngeneratepdf.attributes["type"] = "button"; btngeneratepdf.innerhtml = "generate pdf"; btngeneratepdf.id = "btngeneratepdf "; this.controls.add(btngeneratepdf); tmr = new timer(); tmr.interval = 3000; // 3 seconds tmr.tick += tickhandler; tmr.enabled = true; 2) call method when timer trips:
private void tickhandler(object sender, object e) { generatepdf(listoflistitems); } 3) run code if user selected "generate pdf" button:
private void generatepdf(list<listcolumns> listoflistitems) { if (pdfgenbtnclicked.value != "yes") { return; } tmr.enabled = false; // run once, after val has changed "yes" user clicking "btngeneratepdf" button (set "no" "yes" in jquery's response clicking of button) . . . however, have breakpoint on first line of generatepdf(), , i'm not reaching it, dod-durn it.
update 2
i added event handler, init:
tmr.tick += tickhandler; tmr.init += inithandler; tmr.enabled = true; message.text = "converting data pdf file has been successful"; (i do see message text, although it's not true).
with breakpoints in both methods:
private void tickhandler(object sender, object e) { generatepdf(listoflistitems); } private void inithandler(object sender, object e) { generatepdf(listoflistitems); } ...neither ever reached. why not? theoretically, seems should work...(i know, works in theory).
the short answer question you'll have use ajax, jquery has information regarding using - https://learn.jquery.com/ajax/.
the longer answer you'll need this:
$(document).on("click", '[id$=btngeneratepdf]', function () { $.get('/some/route/', function(result) { //do response, or not depending on needs } }); i'm not familiar sharepoint can't offer on side, basics you'll need create new page fires off pdf generation , access using ajax, handle results in whatever way appropriate.
Comments
Post a Comment