Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Using the RendererInfo class in Blazor to detect rendering context and interactivity.
.claude/skills/aiskillstore-render-info/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | -13% | 0% |
| case-02 | ✗→✓ | ▲ Improved | -64% | 0% |
| case-03 | ✗→✓ | ▲ Improved | -16% | 0% |
| case-04 | ✗→✓ | ▲ Improved | -45% | 0% |
| case-09 | ✗→✓ | ▲ Improved | -21% | 0% |
The RendererInfo class in Blazor provides runtime information about the renderer that is executing the component. It is particularly useful for detecting whether a component is running interactively or statically, and for identifying the specific rendering platform (e.g., Server, WebAssembly, WebView).
IsInteractiveboolcsharp@if (!RendererInfo.IsInteractive) { <p>Connecting...</p> } else { <button @onclick="HandleClick">Click Me</button> }
Namestring"Static": Running in static server-side rendering (SSR)."Server": Running in Interactive Server mode (SignalR)."WebAssembly": Running in Interactive WebAssembly mode."WebView": Running in a Blazor Hybrid application (MAUI, WPF, WinForms).csharp<p>Current Render Mode: @RendererInfo.Name</p>
When a component is prerendered on the server, event handlers (like @onclick) are not active. You can use RendererInfo.IsInteractive to disable inputs until the interactive runtime takes over.
razor<button @onclick="Submit" disabled="@(!RendererInfo.IsInteractive)"> Submit </button>
You might want to show a simple HTML form for static SSR and a rich, interactive component for interactive modes.
razor@if (RendererInfo.Name == "Static") { <form action="/search" method="get"> <input name="q" /> <button type="submit">Search</button> </form> } else { <SearchComponent /> }
AssignedRenderMode: A property on ComponentBase that tells you which render mode was assigned to the component (e.g., InteractiveServer, InteractiveWebAssembly, InteractiveAuto). Note that AssignedRenderMode might be null during static rendering.RendererInfo is available in .NET 8.0 and later.| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-01 | fail→pass | 150,250 | 11,629 | -92% | 1 | 1 | 0% | 1,737 | 1,512 | -13% | 0 | 0 | — |
case-02 | fail→pass | 53,734 | 105,971 | +97% | 1 | 1 | 0% | 4,570 | 1,635 | -64% | 0 | 0 | — |
case-03 | fail→pass | 59,474 | 17,004 | -71% | 1 | 1 | 0% | 2,319 | 1,957 | -16% | 0 | 0 | — |
case-04 | fail→pass | 24,079 | 41,868 | +74% | 1 | 1 | 0% | 2,921 | 1,618 | -45% | 0 | 0 | — |
case-05 | pass→pass | 20,991 | 17,708 | -16% | 1 | 1 | 0% | 2,536 | 2,599 | +2% | 0 | 0 | — |
case-06 | pass→pass | 14,589 | 11,693 | -20% | 1 | 1 | 0% | 946 | 1,612 | +70% | 0 | 0 | — |
case-07 | pass→pass | 9,763 | 7,835 | -20% | 1 | 1 | 0% | 698 | 856 | +23% | 0 | 0 | — |
case-08 | pass→pass | 11,865 | 9,130 | -23% | 1 | 1 | 0% | 658 | 1,141 | +73% | 0 | 0 | — |
case-09 | fail→pass | 12,717 | 13,598 | +7% | 1 | 1 | 0% | 2,285 | 1,795 | -21% | 0 | 0 | — |
case-10 | fail→pass | 18,633 | 10,945 | -41% | 1 | 1 | 0% | 2,549 | 1,501 | -41% | 0 | 0 | — |
case-11 | fail→pass | 21,578 | 12,995 | -40% | 1 | 1 | 0% | 2,521 | 2,104 | -17% | 0 | 0 | — |
case-12 | pass→pass | 19,906 | 3,966 | -80% | 1 | 1 | 0% | 728 | 977 | +34% | 0 | 0 | — |
case-13 | fail→fail | 11,948 | 18,077 | +51% | 1 | 1 | 0% | 1,712 | 1,814 | +6% | 0 | 0 | — |
case-14 | pass→pass | 17,178 | 7,121 | -59% | 1 | 1 | 0% | 1,379 | 1,020 | -26% | 0 | 0 | — |
case-15 | fail→pass | 15,144 | 7,209 | -52% | 1 | 1 | 0% | 1,860 | 1,715 | -8% | 0 | 0 | — |
case-16 | fail→pass | 11,194 | 9,273 | -17% | 1 | 1 | 0% | 1,618 | 1,127 | -30% | 0 | 0 | — |
case-17 | fail→pass | 19,731 | 10,648 | -46% | 1 | 1 | 0% | 3,171 | 1,799 | -43% | 0 | 0 | — |
case-18 | pass→pass | 7,217 | 5,127 | -29% | 1 | 1 | 0% | 1,230 | 1,623 | +32% | 0 | 0 | — |
case-19 | pass→pass | 11,796 | 7,874 | -33% | 1 | 1 | 0% | 1,130 | 2,143 | +90% | 0 | 0 | — |
case-20 | fail→pass | 36,077 | 14,432 | -60% | 1 | 1 | 0% | 6,486 | 1,400 | -78% | 0 | 0 | — |
case-21 | pass→pass | 16,127 | 8,810 | -45% | 1 | 1 | 0% | 1,304 | 1,102 | -15% | 0 | 0 | — |
case-22 | fail→pass | 14,421 | 12,908 | -10% | 1 | 1 | 0% | 2,951 | 2,749 | -7% | 0 | 0 | — |
case-23 | fail→pass | 21,112 | 13,842 | -34% | 1 | 1 | 0% | 2,919 | 2,155 | -26% | 0 | 0 | — |
case-24 | fail→fail | 10,899 | 15,000 | +38% | 1 | 1 | 0% | 1,676 | 2,214 | +32% | 0 | 0 | — |
case-25 | fail→pass | 13,616 | 7,750 | -43% | 1 | 1 | 0% | 2,584 | 1,076 | -58% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 25 cases were attempted. The headline lift of +56 percentage points is the difference between those two pass rates over the 25 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.