feat: Audit gap fixes — ID rendering, RouteData bug, style docs#477
Conversation
…Parameter] The [RouteData] → [Parameter] conversion placed [Parameter] on method parameters, but ParameterAttribute targets properties only (CS0592). This caused build failures in ProductDetails.razor.cs and ProductList.razor.cs (Run 15 regression). Fix: strip [RouteData] entirely and leave a /* TODO */ block comment directing Layer 2 to promote the value to a [Parameter] property. Block comments avoid absorbing the closing ) of method signatures. All 15 L1 tests pass. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add ClientID-based id attribute rendering to GridView, DropDownList, FormView, DataList, and DataGrid following the established pattern from Button/TextBox/Label/Panel/CheckBox. DetailsView and HiddenField already had ID rendering. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Create comprehensive guide for the 66 style sub-components covering cascading parameter patterns, Web Forms to Blazor migration examples, and complete inventory organized by parent control. Added to mkdocs.yml under Utility Features navigation. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…trol ID rendering, style docs Session: 2026-03-18T15-48-15Z-audit-gap-fixes Requested by: Team orchestration Changes: - Bishop: Fixed RouteData→Parameter conversion in bwfc-migrate.ps1 (CS0592, 15/15 L1 tests pass) - Cyclops: Extended ID rendering to data controls (GridView, DropDownList, FormView, DataList, DataGrid) - Beast: Created StylingComponents.md documentation (all 66 style sub-components) - Merged 5 decisions from inbox; deleted inbox files - Appended cross-agent team updates to Cyclops and Beast history Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Appended Forge's decision to decisions.md (ID rendering pattern approval for Bishop and Cyclops work). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Batch implementation of properties identified by gap analysis: - CausesValidation + ValidationGroup on 5 list controls (DropDownList, CheckBoxList, RadioButtonList, ListBox, BulletedList) - Calendar.TodaysDate, HyperLink.ImageUrl - DataPager: PagedControlID, QueryStringField - DataList: DataKeyField, EditItemIndex - Menu: ScrollDownText, ScrollUpText, IncludeStyleBlock - TreeView.NodeWrap - Validator stubs: EnableClientScript, ShowMessageBox, ControlToCompare - ScriptManager.ScriptPath, SiteMapPath.SkipLinkText Build passes clean (0 errors). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Add 10 Web Forms Chart parameters with migration-compatible mappings: - 5 new enums: AntiAliasingStyles, GradientStyle, ChartHatchStyle, ImageStorageMode, TextAntiAliasingQuality - 8 [Parameter] properties: AntiAliasing, BackGradientStyle, BackHatchStyle, BackSecondaryColor, BorderlineDashStyle, ImageLocation, ImageStorageMode, TextAntiAliasingQuality - 2 EventCallback parameters: CustomizeLegend, CustomizeMapAreas - CSS rendering: BackGradientStyle maps to linear/radial-gradient, BorderlineDashStyle maps to border-style on container div - Server-only properties marked [Obsolete] with migration guidance Migrated Chart markup now compiles unchanged. Coverage: 25% -> 100% markup acceptance with 50% real visual fidelity. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
…endering - 40 tests for quick-win properties across 15 components (CausesValidation/ValidationGroup, TodaysDate, ImageUrl, etc.) - 22 tests for Chart Phase 1 params and CSS gradient/border rendering - 10 tests for ID rendering on GridView, DropDownList, FormView, DataList, DataGrid - Total test suite: 2373 tests, 0 failures Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- Chart/Styling: BackGradientStyle, BorderlineDashStyle, AntiAliasing demos - HyperLink: ImageUrl example - Calendar: TodaysDate override demo - Menu: ScrollDownText/ScrollUpText with Unicode arrows - TreeView: NodeWrap with long wrapping text - ValidationSummary: ShowMessageBox migration compatibility - DataPager: PagedControlID and QueryStringField section - DataList: DataKeyField and EditItemIndex demo Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- 15 smoke tests covering uncovered Ajax Toolkit sample pages - 1 Chart Styling render test verifying canvas elements and CSS - Every sample page now has at least one integration test Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
Comprehensive analysis of Web Forms Chart vs Chart.js architecture with 4 implementation options per property, plugin analysis, and recommended Pattern B+ approach. Covers migration-first vs fidelity-first tradeoffs with full property mapping table. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| @@ -0,0 +1,46 @@ | |||
| @code { | |||
| ForwardRef<InputBase<int>> Number = new ForwardRef<InputBase<int>>(); | |||
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| cut.FindComponent<CompareValidator<int>>().Instance.ControlToCompare.ShouldBe("OtherInput"); | ||
| } | ||
|
|
||
| private ExampleModel model = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| cut.FindComponent<AspNetValidationSummary>().Instance.ShowMessageBox.ShouldBeTrue(); | ||
| } | ||
|
|
||
| private ExampleModel model = new ExampleModel(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
Batch A - Validators: - BaseValidator: EnableClientScript (stub), AssociatedControlID (stub) Covers all 5 validators via inheritance Batch B - FormView: - AllowPaging (wired to pager visibility) - CellPadding, CellSpacing, GridLines (table rendering, GridView pattern) Batch C - Login events: - ChangePassword: OnSendingMail, OnSendMailError - CreateUserWizard: OnSendingMail, OnSendMailError (copied from PasswordRecovery pattern) Batch D - GridView + Menu: - GridView: AutoGenerateDeleteButton (wired to command column) - Menu: DynamicHorizontalOffset, DynamicVerticalOffset Build passes clean (0 errors). Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
- BaseValidator EnableClientScript/AssociatedControlID on RequiredFieldValidator + CompareValidator - FormView AllowPaging, CellPadding, CellSpacing, GridLines - GridView AutoGenerateDeleteButton (including rendered delete link verification) - ChangePassword + CreateUserWizard OnSendingMail/OnSendMailError events - Menu DynamicHorizontalOffset/DynamicVerticalOffset Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com>
| @code { | ||
| bool _validSubmit = false; | ||
| bool _invalidSubmit = false; | ||
| ForwardRef<InputBase<string>> NameRef = new ForwardRef<InputBase<string>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
| bool _validSubmit = false; | ||
| bool _invalidSubmit = false; | ||
| ForwardRef<InputBase<string>> NameRef = new ForwardRef<InputBase<string>>(); | ||
| ForwardRef<InputBase<int>> NumberRef = new ForwardRef<InputBase<int>>(); |
Check notice
Code scanning / CodeQL
Missed 'readonly' opportunity Note test
Summary
Three audit gap fixes from the March 8 refresh audit (
dev-docs/component-audit-2026-03-08-refresh.md):1. RouteData→Parameter script bug fix (Bishop)
[Parameter] // TODOcomment absorbed closing)on method parameters[RouteData]entirely and uses/* TODO */block comment directing Layer 2 to promote to[Parameter]property[Parameter]targets properties only (CS0592), not method params2. ID rendering for data controls (Cyclops)
id=@ClientIDrendering to 5 data controls: GridView, DropDownList, FormView, DataList, DataGridComponentIdGenerator— omitsidwhen no developer ID is set3. Style sub-component documentation (Beast)
docs/UtilityFeatures/StylingComponents.md(14.5 KB)mkdocs.ymlunder Utility Features navigationReview
All code changes reviewed and approved by Forge (Lead / Web Forms Reviewer).