צפיות
תשובות
בעיה שקשורה ל-ViewState, Lifecycle
היי,
אני נואש. ניסיתי כל דבר, ולא הצלחתי. הנה הסיפור:
אני מנסה ליצור ב-ASP.NET דף חיפוש, שכולל את הפאנל עם הפרמטרים לחיפוש, ואת תוצאות החיפוש מוצגות ב-Grid וובי שבניתי.
לחיפוש יש כפתור "חפש" עם OnClick event. ב-event הזה נוצרת שאילתה ועולות תוצאות. סוג ה-Database לא משנה במקרה הזה.
תוצאות החיפוש מוצגות ב-Grid ב-CreateChildControls(). בגלל שאירועים קורים אחרי CreateChildControls, צריך לעשות עוד PostBack בשביל לראות את התוצאות, ולשמור ב-ViewState את תוצאות החיפוש.
אבל, ה-Grid שומר ב-ViewState את ה-Fields שמוצגים בו, בשביל שיהיה אפשר למיין לפי שדה מסויים בטבלה כשלוחצים על כותרת השדה.
ועכשיו לבעיה: בגלל המנגנון של web forms, כשיוצרים את ה-Grid כל פעם מחדש, במקום באמת להיווצר מחדש, הוא פשוט מרפרש את ה-Grid שהיה מקודם, גם אם ה-ID השתנה. ואז, כשבוחרים לעשות חיפוש חדש מתוך טבלה אחרת, השרת לא מבין איך השדות שיוצגו הפעם ב-Grid שונים מאלה שנשמרו ב-ViewState, וזורק אקספשן.
ניסיתי הרבה דברים. ניסיתי לתת Ids שונים, לא עזר. ניסיתי לכתוב Controls.Clear(), גם לא עזר. ניסיתי במקום לעשות PostBack שלם לקרוא רק ל-CreateChildControls, אבל אחרי זה לא יכולתי לעשות עוד חיפושים כי הוא לא הצליח לקרוא את הנתונים מהפאנל חיפוש. תלשתי הרבה שערות, ועכשיו אני מחפש פה עזרה. אני מקווה שתוכלו לתת לי רעיונות או להסביר לי משהו שלא אמרתי פה בקשר ללוגיקה שמאחורי כל העסק הזה.
1 תשובות
הסתדר
תודה בכל מקרה 🙂
הפתרון: משחק מכוער בהעברת פונקציות ושורות קוד מ-CreateChildControls, OnPreRender ו-OnClick