הוספת הודעה בצד ה-server

inbal38

New member
הוספת הודעה בצד ה-server

יש לי dropDownList על המסך (אתר web). ברגע שמשתנה בו ערך, אני צריכה לתת הודעה למשתמש האם ברצונו לשנות את ה-dropDownList כי הוא עלול לאבד מידע. בכל פעם שמשנים את ה-sropDownList אני צריכה לגשת ל-DB ולשלוף מידע אחר. כך שה-selectedINdexChnage חייב להיות בצד השרת, כי יש שליפת נתונים מה-DB, מצד שני אני לא צריכה להרשות לשנות את ה-dropDOwnList עד שאני לא מקבלת אישור מהמשתמש ע"י הודעת (messageBox או משהו). איך אני אעשה את זה ?
 

האזרחק

New member
confirm

את מוסיפה קריאה ל confirm באירוע onchange של ה DDL. אם חזר "כן" - חוזרים לשרת להביא נתונים (או ב AJAX כדי שלא יראו רענון של המסך - לבחירתך), אם חזר "לא" - לא עושים כלום. אני חושב ש return false אמור להספיק אם שינוי של ה DDL גורם ל POSTBACK, אבל את זה כבר תצטרכי לבדוק לבד.
 

24sharon

New member
בדקת את זה?

גם אני חשבתי שהפתרון הטוב זה CONFIRM ואפילו רציתי לעשות דוגמא. אלא שבפועל בכל מצב יש קריאה לשרת. דוגמא? הנה!
<html xmlns="http://www.w3.org/1999/xhtml"> <head runat="server"> <title>Untitled Page</title> <script type="text/javascript"> function confrm() { if(confirm("are you sure....?")==true) {return true;} else {return false;} } </script> </head> <body> <form id="form1" runat="server"> <div> <asp:DropDownList ID="DropDownList1" runat="server" OnSelectedIndexChanged="DropDownList1_SelectedIndexChanged" AutoPostBack="True"> <asp:ListItem Text="aafdaf" Value="aaaa"></asp:ListItem> <asp:ListItem Text="aafdfsfsdaf" Value="aaeaa"></asp:ListItem> </asp:DropDownList> </div> </form> </body> </html>​
וקוד BEHIND
protected void Page_Load(object sender, EventArgs e) { DropDownList1.Attributes.Add("onchange", "confrm()"); } protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e) { Response.Write("fsgsdfgwdfgsfggsgssgsgsgsgs"); }​
משום מה בכל מצב מתבצעת קריאה לשרת, אלא אם כן יש שינוי מסוים שצריך לבצע בקוד.
 

האזרחק

New member
זה עובד מצויין

return true תמיד הצחיק אותי... (זה אמנם בוליאני ולכל מטבע יש שני צדדים אבל return true זה לא ההפך מ return false וזו טעות להשתמש במושג הזה)
myddl.Attributes.Add("onchange","if(!confirm('are you sure?')){return false;};");​
עבור DDL שמבצע POSTBACKS זה יעבוד מצויין.
 

24sharon

New member
צודק ../images/Emo45.gif זה עובד

אבל עדיין לא מצאתי למה הקוד שלי לא עובד, למה תמיד הוא מגיע לצד שרת.
DropDownList1.Attributes.Add("onchange", "confrm()");​
והסקריפט
function confrm() { if(confirm("are you sure....?")==true) {return true;} else {return false;} }​
סליחה על הצורה הארוכה רק בדקתי על מנת להיות בטוחה שאין חיסרון בקוד ושהוא בטוח בסדר.
 

inbal38

New member
מבחינתי זה פתר את הבעייה

אני בעצם צריכה להגיע גם לצד של הלקוח כדי לתת את ההודעה וגם לצד של השרת, כדי לקבל את ההודעה מהלקוח. מה שעשיתי שמתי TEXTBOX נסתר על הדף שקיבל את התשובה מהלקוח: document.all("txt1").value = confirm("sdfsdfg"); ואז כשהוא הגיע ל-selectedCHange בצד של השרת כבר היתה לו תשובה ביד מה הלקוח רוצה. תודה רבה !
 
למעלה