ASP: סייעי HTML מותאמים אישית עבור סלקט בוקס
-
בוקר טוב,
אני מנסה לכתוב סייעי HTML מותאמים אישית, ואני רוצה שהם יהיו בעלי טיפוסיות-חזקה :lol: (איזה שם מפוצץ!!), כלומר שהם יקבלו ביטוי למדא וידעו לשלוף ממנו את הנתונים, כמו Html.DropDownListFor ודומיו.ראיתי כאן הסבר איך לממש זאת, אולם אני מסתבך איך לממש זאת עבור dropDownList. שהרי שם לא מספיק ליצור תגית אחת של select אלא צריך גם להוסיף את תגיות הoption,
אשמח אם מישהו יוכל לעזור לי.כמו כן, אם הבנתי נכון, היום אין צורך להשתמש בMvcHtmlString אלא מספיק להשתמש בhtmlString? כי הראשון נועד כדי לתת תמיכה לאחור לגרסאות ישנות .net 3.5 ומטה, והיום כבר לא משתמשים בזה? לא?!
תודה רבה!
פורסם במקור בפורום CODE613 ב02/11/2015 10:15 (+02:00)
-
דבר ראשון שאלת תם: ללממממה??
דבר שני, המקור נמצא פה: https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/SelectExtensions.cs
וכעת סוף סוף לשאלתך. אתה צריך להוסיף פרמטר שמייצג אוסף לחלץ ממנו את האפשרויות. במקור (כלומר בDropDownListFor של MVC) אז אין לזה טיפוסיות פתוחה: האוסף הוא מסוג SelectListItem שבשביל לייצר אותו עושים לולאה פשוטה ועצובה (או שאילתת LINQ אלגנטית מבחוץ :)).הקוד הבסיסי הוא כזה:
public static HtmlString MyDropDownFor<TModel, TValue>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TValue>> name, IEnumerable<SelectListItem> items ) { var sb = new StringBuilder(); sb.AppendFormat("<select name={0}>\n", ExpressionHelper.GetExpressionText(name)); foreach (var item in items) sb.AppendFormat("<option value=\"{0}\">{1}</option>\n", item.Value, item.Text); sb.Append("</select>"); return new HtmlString(sb.ToString()); }
(הטיפוסיות החזקה מתבטאת שאם תשנה את שם המאפיין במחלקה (עם rename של VS), אז הname של הselect יתעדכן בהתאם).
אבל הקוד הזה מאוד פרימיטיבי. גם זה לא עסק לעבוד עם מחרוזות לבנות HTML כי זה לא גמיש בעליל. עיון קל בקוד של מקרוסופט או של אחרים יראה לך שיש הרבה רעיונות מה להרחיב...
פורסם במקור בפורום CODE613 ב02/11/2015 11:44 (+02:00)
-
כמו כן, אם הבנתי נכון, היום אין צורך להשתמש בMvcHtmlString אלא מספיק להשתמש בhtmlString? כי הראשון נועד כדי לתת תמיכה לאחור לגרסאות ישנות .net 3.5 ומטה, והיום כבר לא משתמשים בזה? לא?!
אכן. המשפט האחרון לא מדוייק "היום לא משתמשים עם זה" ממשיכים להשתמש בזה אבל לצורך תאימות לאחור... אם אינך כמו מקרוסופט אלא כמוני, שמבין מליון לקוחותיך (המתכנתים) אין אפי' אחד שעובד עם .net הישן אתה יכול חופשי להשתמש בhtmlString.
פורסם במקור בפורום CODE613 ב02/11/2015 11:49 (+02:00)
-
@דוד ל.ט.
דבר שני, המקור נמצא פה: https://aspnetwebstack.codeplex.com/SourceControl/latest#src/System.Web.Mvc/Html/SelectExtensions.cs
תודה רבה רבה!! כמה חיפשתי את זה בקוד המקור של מיקרוסופט :lol: :lol:
@דוד ל.ט.
אבל הקוד הזה מאוד פרימיטיבי. גם זה לא עסק לעבוד עם מחרוזות לבנות HTML כי זה לא גמיש בעליל. עיון קל בקוד של מקרוסופט או של אחרים יראה לך שיש הרבה רעיונות מה להרחיב...
לא הבנתי מה כוונתך?
פורסם במקור בפורום CODE613 ב02/11/2015 12:25 (+02:00)