Skip to content
Back to skills

Aspnet Blazor

ASecurity

Blazor Server, WebAssembly, and United (Auto) with components, interop, and render modes. Covers .NET 8+ Blazor patterns. USE WHEN: user mentions "Blazor", "Blazor Server", "Blazor WASM", "Blazor WebAssembly", "Blazor components", "render modes", "Blazor interop" DO NOT USE FOR: Angular components - use `angular`, React components - use `react`, Svelte - use `svelte`

  • 31 stars
  • 0 votes
  • 0 copies
  • 6 views
  • Added September 8, 2026
ai-agentsjavascriptjavareactangulardocumentation

Works with

  • cli
  • mcp

Security analysis

A100/100

Scanned September 8, 2026

npx -y skills add claude-dev-suite/claude-dev-suite --skill aspnet-blazor --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Aspnet Blazor?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Aspnet Blazor
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/claude-dev-suite-aspnet-blazor/badge)](https://www.skillsdirectory.com/skills/claude-dev-suite-aspnet-blazor)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: aspnet-blazor
description: |
  Blazor Server, WebAssembly, and United (Auto) with components, interop, and render modes.
  Covers .NET 8+ Blazor patterns.

  USE WHEN: user mentions "Blazor", "Blazor Server", "Blazor WASM", "Blazor WebAssembly",
  "Blazor components", "render modes", "Blazor interop"

  DO NOT USE FOR: Angular components - use `angular`,
  React components - use `react`, Svelte - use `svelte`
allowed-tools: Read, Grep, Glob, Write, Edit
---
# ASP.NET Blazor - Quick Reference

> **Deep Knowledge**: Use `mcp__documentation__fetch_docs` with technology: `blazor` for comprehensive documentation.

## Render Modes (.NET 8+)

| Mode | Description | Use For |
|------|-------------|---------|
| `InteractiveServer` | Server-side via SignalR | Internal apps, real-time |
| `InteractiveWebAssembly` | Client-side WASM | Offline, no server dependency |
| `InteractiveAuto` | Server first, then WASM | Best of both worlds |
| Static SSR (default) | No interactivity | Content pages, SEO |

```razor
@* Page-level render mode *@
@rendermode InteractiveServer

@* Component-level *@
<Counter @rendermode="InteractiveWebAssembly" />
```

## Component Pattern

```razor
@* Counter.razor *@
<h3>Counter</h3>
<p>Count: @count</p>
<button @onclick="Increment">Click me</button>

@code {
    private int count = 0;

    [Parameter]
    public int InitialCount { get; set; } = 0;

    [Parameter]
    public EventCallback<int> OnCountChanged { get; set; }

    protected override void OnInitialized()
    {
        count = InitialCount;
    }

    private async Task Increment()
    {
        count++;
        await OnCountChanged.InvokeAsync(count);
    }
}
```

## Forms with Validation

```razor
<EditForm Model="user" OnValidSubmit="HandleSubmit" FormName="UserForm">
    <DataAnnotationsValidator />
    <ValidationSummary />

    <InputText @bind-Value="user.Name" class="form-control" />
    <ValidationMessage For="@(() => user.Name)" />

    <InputText @bind-Value="user.Email" class="form-control" />
    <ValidationMessage For="@(() => user.Email)" />

    <button type="submit">Save</button>
</EditForm>

@code {
    [SupplyParameterFromForm]
    private UserModel user { get; set; } = new();

    private async Task HandleSubmit()
    {
        await UserService.CreateAsync(user);
        Navigation.NavigateTo("/users");
    }
}
```

## JavaScript Interop

```razor
@inject IJSRuntime JS

@code {
    private async Task ShowAlert()
    {
        await JS.InvokeVoidAsync("alert", "Hello from Blazor!");
    }

    private async Task<string> GetValue()
    {
        return await JS.InvokeAsync<string>("localStorage.getItem", "key");
    }
}
```

## Dependency Injection

```razor
@inject IUserService UserService
@inject NavigationManager Navigation
@inject ILogger<UserList> Logger
```

## Anti-Patterns

| Anti-Pattern | Why It's Bad | Correct Approach |
|--------------|--------------|------------------|
| InteractiveServer for public sites | Latency, scaling | Use Auto or WASM |
| Large WASM downloads | Slow initial load | Use Auto mode |
| Direct DOM manipulation | Breaks diffing | Use Blazor bindings |
| Not disposing JS interop | Memory leaks | Implement `IAsyncDisposable` |

## Quick Troubleshooting

| Issue | Likely Cause | Solution |
|-------|--------------|----------|
| Component not interactive | Missing render mode | Add `@rendermode` directive |
| JS interop fails | WASM restriction | Use `IJSRuntime` correctly |
| State lost on navigation | No state container | Use cascading parameters or DI |
| Pre-rendering flicker | Async data on init | Use `OnInitializedAsync` with loading state |

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.