c# - Delegate not working in asp.net -
i having trouble getting delegate work. want function when user clicks button first time label display driver came in third, second time hit button label clear , driver placed in second display in place , when click button third time display winner of race
this aspx.cs page
using system; using system.collections.generic; using system.linq; using system.web; using system.web.ui; using system.web.ui.webcontrols; namespace webprogramming3.week_3 { public partial class exercise1 : system.web.ui.page { static raceresult userclick; //public int clicks = 0; protected void page_load(object sender, eventargs e) { userclick = new raceresult(0); userclick.nbrclicksreached += user_click_nbrclicksreached; } private void user_click_nbrclicksreached(string message) { lblraceresults.text += message; } protected void btnrace_click(object sender, eventargs e) { userclick.btnclicks++; } } public delegate void stringdelegate(string message); public class raceresult { public int btnclicks { get; set; } //delegate public event stringdelegate nbrclicksreached; public raceresult( int btnclicks) { btnclicks = btnclicks; } public void add(int amount) { if (btnclicks == 1) { if (nbrclicksreached != null) nbrclicksreached("in 3rd place kimi räikkönen"); } if (btnclicks == 2) { if (nbrclicksreached != null) nbrclicksreached("in 2nd place sebastian vettel"); } if (btnclicks >= 3) { if (nbrclicksreached != null) nbrclicksreached("in 1st place lewis hamilton"); } } } } this aspx page
<body> <form id="form1" runat="server"> <div> <asp:button id="btnfeed" onclick="btnrace_click" runat="server" text="button" /> <asp:label id="lblraceresults" runat="server" text="label"></asp:label> </div> </form> </body> if problem unclear please feel free ask more questions.
your code has problems. first of don't protect initialization of global variable in page_load event postbacks. every time run event on server (runat=server) page_load event executed before event declared in control, end reinitializing raceresult variable everytime.
also, static variables not concept in web application, see example question/answer: static vs session
so rewriting of initial part of page is
public partial class exercise1 : system.web.ui.page { private raceresult userclick; //public int clicks = 0; protected void page_load(object sender, eventargs e) { // first page load? if(!ispostback) { userclick = new raceresult(0); userclick.nbrclicksreached += user_click_nbrclicksreached; session["userclick"] = userclick; } else { // first load userclick = session["userclick"]; if(userclick == null) { userclick = new raceresult(0); userclick.nbrclicksreached += user_click_nbrclicksreached; session["userclick"] = userclick; } } } now part should call delegate confusing. userclick.add method calls delegate don't call userclick.add anywhere in page code shown. integer passed method not used inside it, seems useless , removed. anyway
protected void btnrace_click(object sender, eventargs e) { // should not required but.... if(userclick != null) { userclick.btnclicks++; // integer meaningless in context of code above // removed because add logic driven // btnclicks value userclick.add(0); } }
Comments
Post a Comment