Skip to content

V17 Rendering Issues - Comprehensive Scan

Date: 2026-02-27 Scan scope: C:\repos\progress\dbl.Progress\src\www\Views\ (all .cshtml files)


Updated Feb 28, 2026

The DropDown.Flexible migration root cause was FIXED in commit 4168abe — see Report 31. Additional runtime issues discovered — see Report 32 for comprehensive findings including cache busting, case sensitivity, calculator deep-dive, and backend service gaps.

Summary

Category Count Severity Status
1. IPublishedContent vs MediaWithCrops 87 occurrences in 53 files CRITICAL OPEN
2. DropDown.Flexible without try-catch 18+ occurrences in 12+ files HIGH OPEN (migration fix done, views still need SafeDropdownValue)
3. MasterLogin missing RenderScripts 1 file HIGH OPEN
4. Cache busting missing ~100+ script/link tags CRITICAL NEW (Report 32)
5. External CDN dependencies (unpkg) 18 occurrences in 9 files MEDIUM OPEN
6. Case sensitivity paths 14 broken references HIGH NEW (Report 32)
7. Bootstrap 4 patterns 0 in views (CLEAN) -- --
8. Hardcoded URLs / API keys 0 hardcoded keys (proper config) -- --
9. sr-only / old BS4 spacing classes 0 in views (CLEAN) -- --
10. Missing null-safe Link patterns Most have null checks (LOW risk) LOW --
11. jQuery fallback version mismatch 5 master layouts LOW --

1. IPublishedContent vs MediaWithCrops (CRITICAL)

Problem: v17 MediaPicker3 returns MediaWithCrops, not IPublishedContent. Using Value<IPublishedContent>() returns null silently, so images/media simply don't render.

Owner: Joao (Razor/MVC)

53 Affected Files (87 occurrences)

Page Templates (10 files)

File Line Property Pattern
Views\articleList.cshtml 9 headerImage Value<IPublishedContent>("headerImage")
Views\contactus.cshtml 12 headerImage Value<IPublishedContent>("headerImage")
Views\cookies.cshtml 21,23,30 headerImage Value<IPublishedContent>("headerImage")
Views\CustomerOnlyPage1.cshtml 15 headerImage Value<IPublishedContent>("headerImage")
Views\error.cshtml 12 headerImage Value<IPublishedContent>("headerImage")
Views\search.cshtml 26 headerImage Value<IPublishedContent>("headerImage")
Views\standardPage.cshtml 12 headerImage Value<IPublishedContent>("headerImage")
Views\standardPageWow.cshtml 26 headerImage Value<IPublishedContent>("headerImage")
Views\termsAndConditions.cshtml 16,18,25 headerImage Value<IPublishedContent>("headerImage")
Views\TermsAndConditionsMobile.cshtml 16,18,25 headerImage Value<IPublishedContent>("headerImage")
Views\testimonials.cshtml 16 headerImage Value<IPublishedContent>("headerImage")
Views\gallery.cshtml 66 galleryImage item.Value<IPublishedContent>("galleryImage")

Partials - calcGridSlider (4 files)

File Line Properties
Partials\calcGridSlider\youTubeVideo.cshtml 22 image
Partials\calcGridSlider\splitPictureSlide.cshtml 9,10,11 firstSeparator, mainImage, secondSeperator
Partials\calcGridSlider\pictureSlide.cshtml 23 picture / Picture
Partials\calcGridSlider\pictureTextBox.cshtml 22 image
Partials\calcGridSlider\internalVideo.cshtml 22,53 image, internalVideo

Partials - home (5 files)

File Line Properties
Partials\home\internalVideo.cshtml 18,23 image, internalVideo
Partials\home\pictureSlide.cshtml 13 image
Partials\home\youTubeVideo.cshtml 18 image
Partials\home\pictureTextBox.cshtml 20 image
Partials\home\vimeoVideo.cshtml 18 image
Partials\home\slider.cshtml 13 slider (IEnumerable)

Partials - news (3 files)

File Line Properties
Partials\news\topStory5Articles.cshtml 60,124 articleCategoryPicker
Partials\news\topStory.cshtml 74,151 articleCategoryPicker
Partials\news\NewsList.cshtml 62 articleCategoryPicker

Partials - LatestArticles (3 files)

File Line Properties
Partials\LatestArticlesPaging.cshtml 56 articleCategoryPicker
Partials\LatestArticles.cshtml 27 articleCategoryPicker
Views\LatestArticlesPaging.cshtml 56 articleCategoryPicker

Partials - blockgrid Components (25 files)

File Line Properties
blockgrid\Components\audioTagElement.cshtml 10 audioTag
blockgrid\Components\cardGridControls.cshtml 36,38 image, icon
blockgrid\Components\careerWidgetListControl.cshtml 19 careerParent
blockgrid\Components\careerWidgetControl.cshtml 25 careerParent
blockgrid\Components\contactUsWidget.cshtml 22,24,32,34,94,96 contactUsIcon, sectionIcon, icon
blockgrid\Components\counter.cshtml 19,22 image, backgroundImage
blockgrid\Components\cTAItem.cshtml 15 backgroundImage
blockgrid\Components\ctaCurves.cshtml 40,42,45,47,51,53 Image, firstCurve, secondCurve
blockgrid\Components\ctaElement.cshtml 15 backgroundImage
blockgrid\Components\faqItems.cshtml 62 faqs (content picker, not media)
blockgrid\Components\featureControls.cshtml 31,32 image, extraImage
blockgrid\Components\grid_element_largeleafletmap.cshtml 63 mapPin
blockgrid\Components\imageGalleryControl.cshtml 27,29,69,72,114,116 image
blockgrid\Components\imageListControl.cshtml 25 image
blockgrid\Components\imageWithLink.cshtml 22 image
blockgrid\Components\parallaxImageItem.cshtml 28,30 Image
blockgrid\Components\staffMemberControl.cshtml 34,38 staffMemberImage
blockgrid\Components\staffMembersControl.cshtml 32,36 staffMemberImage
blockgrid\Components\testimonialCardItem.cshtml 35,47 testimonialCategory (content picker)
blockgrid\Components\videoPopout.cshtml 12,15 internalVideo, image
blockgrid\Components\videoFullWidth.cshtml 16 internalVideo

Other Partials

File Line Properties
Partials\blocklist\Components\headerContact.cshtml 70 icon
Partials\RelatedArticlesType2.cshtml 12 articleCategoryPicker
Partials\RelatedArticles.cshtml 13 articleCategoryPicker
Partials\SiteLayout\SEO.cshtml 51 openGraphImage

Fix pattern: Change Value<IPublishedContent>("alias") to Value<MediaWithCrops>("alias") and use .MediaUrl() instead of .Url().

Note: Some of these (articleCategoryPicker, faqs, careerParent, testimonialCategory) are content pickers not media pickers. For content pickers, IPublishedContent is actually correct in v17. Verify datatype before changing.


2. DropDown.Flexible Without try-catch (HIGH)

Root cause FIXED

Migration tool fix applied (commit 4168abe). GridValueTypeConverter.ConvertDropdownValue() now returns string instead of JArray. See Report 31 for definitive analysis. After re-migration, dropdown values are correctly double-encoded strings inside block JSON. Views still need SafeDropdownValue() as defense layer for previously-migrated data.

Problem: v8 DropDown.Flexible values are JSON arrays ["value"]; v17 FlexibleDropdownPropertyValueConverter expects the same format. Inside block JSON, values must be double-encoded strings "[\"value\"]". Without try-catch or SafeDropdownValue(), Value<string>() can throw JsonException.

Owner: Joao (Razor/MVC)

Files NOT using try-catch or SafeDropdownValue

File Line Property Current Code
blockgrid\Components\announcementControls.cshtml 13 display content.Value<string>("display") -- NO try-catch
blockgrid\Components\ctaCurves.cshtml 33,35 gradient content.Value<string>("gradient") -- NO try-catch
blockgrid\Components\ctaCurves.cshtml 68,70 buttonStyle content.Value<string>("buttonStyle") -- NO try-catch
blockgrid\Components\flipCardControls.cshtml 18,20 flip content.Value<string>("flip") -- NO try-catch
blockgrid\Components\cardGridControls.cshtml 37 imageLocation item.Value<string>("imageLocation") -- NO try-catch
blockgrid\Components\grid_element_loanboxescompletegrideditor.cshtml 17 display content.Value<string>("display") -- NO try-catch
blockgrid\Components\grid_element_services_list_image.cshtml 69 gradient settings.Value<string>("gradient") -- NO try-catch
blockgrid\Components\iconListOptContactInfoControl.cshtml 92 buttonClass item.Value<string>("buttonClass") -- NO try-catch
blockgrid\Components\iconListOptContactInfoControl.cshtml 197 buttonClass item.Value<string>("buttonClass") -- NO try-catch
Views\standardPageWithImageText.cshtml 27 buttonClass Model.Value<string>("buttonClass") -- NO try-catch

Files already using try-catch (GOOD - no action needed)

These are correctly wrapped and safe: - accordionButtonElement.cshtml (lines 31, 68) -- buttonClass - accordionButtonMain.cshtml (lines 35, 78) -- buttonClass - headerNew.cshtml (lines 45, 50) -- gradient, buttonStyle - headerNews.cshtml (line 35) -- gradient - NewsGlobalCTA.cshtml (lines 53, 64) -- buttonStyle, gradient - cardItem.cshtml (line 28) -- imageLocation - faqElement.cshtml (line 15) -- flip - testimonialCardItem.cshtml (lines 25, 33) -- imageLocation, gradient - mainLoanBoxWidget.cshtml (line 159) -- buttonClass - _CardText.cshtml (line 15) -- imageLocation - _CardItemContent.cshtml (line 15) -- imageLocation - splitPictureSlide.cshtml (lines 18, 20) -- gradient, buttonStyle

Files using SafeDropdownValue (GOOD - no action needed)

14 usages across files like heroElement.cshtml, heroItem.cshtml, ctaText.cshtml, splitPictureSlider.cshtml, spotlightControls.cshtml, spotlightGridControls.cshtml, footerListControl.cshtml, calculatorControls.cshtml, careerWidgetControl.cshtml, announcementItemScrollControls.cshtml.


3. MasterLogin Missing RenderScripts (HIGH)

Problem: MasterLogin.cshtml registers 10+ scripts via Html.RequiresJs() (lines 99-117) but has Layout = null and never calls Html.RenderScripts(). Scripts are silently discarded.

Owner: Joao (Razor/MVC)

File Lines Issue
Views\MasterLogin.cshtml 99-117 Html.RequiresJs() calls for slick, bootstrap, fancybox, lazysizes, progressCore -- none rendered

Fix: Either add @Html.RenderScripts() before </body>, or replace RequiresJs() calls with direct <script> tags (like master.cshtml pattern).


4. External CDN Dependencies - unpkg.com (MEDIUM)

Problem: 9 page templates load AOS (Animate on Scroll) v2.3.1 from unpkg.com. This is a reliability/performance risk -- should be vendored locally.

Owner: Rodrigo (CSS/JS)

File Lines
Views\Faq.cshtml 16-17
Views\home.cshtml 16-17
Views\homeFullWidthSection.cshtml 11-12
Views\homeGrid.cshtml 16-17
Views\standardPageNew.cshtml 15-16
Views\StandardPageThirdParty.cshtml 17-18
Views\standardPageWow.cshtml 13,16
Views\standardPageWithImageText.cshtml 12-13
Views\TokenAuthentication.cshtml 11-12

Fix: Download aos.css and aos.js to ~/vendor/aos/ and reference locally.


5. Bootstrap-datepicker from cdnjs (MEDIUM)

Problem: Three master layouts reference bootstrap-datepicker v1.3.0 (JS) and v1.7.0 (CSS) from cdnjs. Version mismatch between CSS and JS. Also, bootstrap-datepicker may not be BS5-compatible.

Owner: Rodrigo (CSS/JS)

File Lines
Views\MasterLogin.cshtml 121-122
Views\MasterThirdParty.cshtml 120, 250
Views\master.cshtml 124, 254

6. jQuery Fallback Version Mismatch (LOW)

Problem: Primary jQuery is 3.6.0 (CDN), but fallback is 3.5.1 (local). Minor issue but should be consistent.

Owner: Rodrigo (CSS/JS)

File Line Primary Fallback
Views\master.cshtml 161-162 3.6.0 3.5.1
Views\MasterLogin.cshtml 67-68 3.6.0 3.5.1
Views\MasterThirdParty.cshtml 157-158 3.6.0 3.5.1
Views\masterNoHeaderNof.cshtml 78-79 3.6.0 3.5.1
Views\masterNoHeaderNoFooter.cshtml 79-80 3.6.0 3.5.1

7. Items Verified CLEAN

No Bootstrap 4 data attributes in Views

  • data-toggle -- 0 occurrences (all converted to data-bs-toggle)
  • data-dismiss -- 0 occurrences
  • data-parent -- 0 occurrences (all converted to data-bs-parent)
  • data-target -- 2 occurrences in quickLinkDropDownControl.cshtml but these are custom attributes on <option> elements used by bootstrap-select, NOT Bootstrap 4 toggle attributes
  • data-slides-to-show/data-slides-to-scroll in gridslider.cshtml -- Slick Carousel custom attributes, not Bootstrap

No sr-only classes in Views

All screen-reader classes appear to be updated.

No old Bootstrap spacing (ml-, mr-, pl-, pr-) in Views

Clean -- all using BS5 ms-/me-/ps-/pe- or custom CSS.

No hardcoded API keys in Views

Google Maps API key properly loaded from Configuration["ProgressSettings:GoogleMapsApiKey"] in all 3 map components.

No hardcoded localhost/localtest.me URLs

Clean.

No connection strings in Views

Clean.

RequiresCss/RequiresJs are functional

Custom helpers (ScriptHelper.cs, CssHelper.cs) provide working drop-in replacements. All master layouts (except MasterLogin) properly call RenderScripts() and RenderCss().


Priority Fix List

P0 -- CRITICAL (will break rendering)

  1. 87 IPublishedContent usages in 53 files -- images/media silently null Owner: Joao | Effort: ~4h (mechanical find-replace with type verification)

P1 -- HIGH (will throw exceptions)

  1. 10 unprotected dropdown reads in 6 files -- JsonException on page load Owner: Joao | Effort: ~1h (wrap in try-catch or convert to SafeDropdownValue)

  2. MasterLogin missing RenderScripts -- login page has no JS Owner: Joao | Effort: ~15min

P2 -- MEDIUM (reliability/performance)

  1. AOS from unpkg.com in 9 files -- external CDN dependency Owner: Rodrigo | Effort: ~30min (vendor locally)

  2. bootstrap-datepicker version mismatch -- CSS v1.7.0 vs JS v1.3.0 Owner: Rodrigo | Effort: ~30min

P3 -- LOW (cosmetic/consistency)

  1. jQuery fallback version mismatch -- 3.6.0 primary vs 3.5.1 fallback Owner: Rodrigo | Effort: ~15min
Migration documentation by Double for Progress Credit Union