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

Popular posts from this blog

android - Pass an Serializable object in AIDL -

How to provide Authorization & Authentication using Asp.net, C#? -

How to use Authorization & Authentication in Asp.net, C#? -