שינוי תוכן של Panel?

האזרחק

New member
שינוי תוכן של Panel?

אני כותב custom control שיורש מPanel. אני מעוניין לעבור על ה HTML שנמצא בתוך ה PANEL אחרי רינדור הפקדים הפנימיים ולבצע בו שינויים. איך אפשר לגשת בתוך פקד הPanel לתוכן המרונדר ולשנות אותו? (נניח שאני רוצה לעשות Replace למילה מסויימת)
 

האזרחק

New member
ICAP מי מכיר?

למישהו יצא לעבוד עם זה בסביבת .NET? אני צריך לפנות למנוע של נורטון כדי לבדוק stream של קבצים מתוך האפליקציה. פנייה ב TCP IP כל הזמן מחזירה הודעת שגיאה שהפרוטוקול שגוי...
 

yairov

New member
תגובה

באירוע Render אתה מקבל את ה-HtmlTextWriter שמכיל את ה-HTML של ה-Control.
protected override void Render(HtmlTextWriter output) { StringWriter writer = new StringWriter(); HtmlTextWriter buffer = new HtmlTextWriter(writer); base.Render(buffer); string htmlMarkup = writer.ToString(); int insertPoint = htmlMarkup.IndexOf("<table") + "<table".Length; htmlMarkup = htmlMarkup.Insert(insertPoint, " name=" + this.ClientID + " "); output.Write(htmlMarkup); }​
 

Justin Angel

New member
קה פרובלמה מואי צ'יקיטה?

מסכים עם יאיר ומרחיב. בעקרון, ברגע שנגמר הרנדור, אין יותר Panel ואין יותר Page. אלא אם כן מדובר במצב באמת חריג (מבחינת העקימות הארכיטקטורית הקיימת) מומלץ להעביר את הלוגיקה הזו הלאה. השלב הבא אחרי הרנדור הוא לחזור ל-ASP.Net Http Pipeline ולבצע מתוך IHttpMoudle את השינויים. למשל ה-ASP.Net CSS Control Adapters הם באמת מבוססים על זה שכל דף עובר בסופו של דבר דרך IHttpModule. אפשרות נוספת אם באמת מדובר רק בפקד אחד ויחיד היא ליצור לו Control Render Adapter שהמטרה שלו בחיים היא לבצע Custom Rendering (או פשוט לדרוס את מתודת ה-Render של הפקד). במקרה שלך הרינדור לא יעביר HtmlTextWriter האמיתי של הדף ויגיד לו "תתרנדרו פנימה" אלא יעביר להם HtmlTextWriter "מזוייף" מבוסס StringBuilder שלתוכו כל פקד יתרנדר ותוכל לערוך את המחרוזות בצורה הרבה יותר חופשית מאשר בתוך Streamים למיניהם.
 
למעלה