Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
36 commits
Select commit Hold shift + click to select a range
83704eb
feat: support .NET 11 preview
ArgoZhang Sep 1, 2026
6f79cfa
refactor: 移除冗余代码
ArgoZhang Sep 1, 2026
c6b9515
refactor(DateTimeRange): 移除冗余代码
ArgoZhang Sep 1, 2026
7f9feb4
refactor(FilterProvider): 移除冗余代码
ArgoZhang Sep 1, 2026
a7133a2
refactor(Layout): 移除冗余代码
ArgoZhang Sep 1, 2026
6dc4dbc
refactor(Layout): 移除冗余代码
ArgoZhang Sep 1, 2026
671b800
refactor(Dropzone): 移除冗余代码
ArgoZhang Sep 1, 2026
e6130f1
refactor: 重构 ValidateAsync 方法并且更新单元测试
ArgoZhang Sep 1, 2026
5d9ddc0
chore: 更新 github action 运行时框架
ArgoZhang Sep 1, 2026
3eb1209
chore: 更新 Dockfile 配置文件
ArgoZhang Sep 1, 2026
05c150e
test: 表单提交跟改为异步
ArgoZhang Sep 1, 2026
6bbf4d2
test: 右键菜单更改为异步请求方法
ArgoZhang Sep 1, 2026
85e75eb
Merge branch 'main' into dev-net11
ArgoZhang Sep 2, 2026
1a90676
Revert "refactor: 重构 ValidateAsync 方法并且更新单元测试"
ArgoZhang Sep 2, 2026
3a7789f
Merge remote-tracking branch 'origin/main' into dev-net11
ArgoZhang Sep 2, 2026
41517f9
revert: 撤销注释
ArgoZhang Sep 2, 2026
d8f97aa
Merge branch 'main' into dev-net11
ArgoZhang Sep 3, 2026
3cf0572
doc: 更新注释
ArgoZhang Sep 4, 2026
c30b044
refactor: 更新解决方案配置项
ArgoZhang Sep 4, 2026
4e59705
feat(IValidateComponent): add SetValidationPendingState method
ArgoZhang Sep 4, 2026
229ee15
doc: 增加异步验证示例
ArgoZhang Sep 4, 2026
3a71ab8
Merge branch 'main' into dev-net11
ArgoZhang Sep 4, 2026
70eae94
revert: 撤销更改
ArgoZhang Sep 4, 2026
93efcee
refactor: 更新单元测试
ArgoZhang Sep 4, 2026
9885987
Merge branch 'main' into dev-net11
ArgoZhang Sep 4, 2026
cd029cc
revert: 撤销更改
ArgoZhang Sep 4, 2026
8ba1b75
test: 更新单元测试
ArgoZhang Sep 4, 2026
bc46d0c
Merge branch 'main' into dev-net11
ArgoZhang Sep 4, 2026
2051f61
refactor: 重构代码块提高可读性
ArgoZhang Sep 4, 2026
0857870
Merge branch 'refactor-net11' into dev-net11
ArgoZhang Sep 4, 2026
0de2e08
Merge branch 'main' into dev-net11
ArgoZhang Sep 5, 2026
a5228e4
Merge branch 'main' into dev-net11
ArgoZhang Sep 12, 2026
9105e66
chore: update dependency to 11.0.0-rc.*
ArgoZhang Sep 12, 2026
b8bec76
Merge branch 'main' into dev-net11
ArgoZhang Sep 14, 2026
20f12c3
refactor: 重连组件兼容 net11
ArgoZhang Sep 24, 2026
c43f0e2
doc: 更新示例
ArgoZhang Sep 24, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .github/workflows/auto-pull-request-checks.yml
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@ jobs:
- name: Setup .NET SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
global-json-file: global.json

- name: Cache NuGet packages
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ jobs:
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
global-json-file: global.json

- name: Cache NuGet packages
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/pack.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ jobs:
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
global-json-file: global.json

- name: Cache NuGet packages
uses: actions/cache@v4
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/publish.yml
Original file line number Diff line number Diff line change
Expand Up @@ -15,7 +15,7 @@ jobs:
- name: Setup .NET Core SDK
uses: actions/setup-dotnet@v4
with:
dotnet-version: 10.0.x
global-json-file: global.json

- name: Publish wasm
run: |
Expand Down
4 changes: 2 additions & 2 deletions Version.props
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
<Project>

<PropertyGroup>
<RunTargetFramework>net10.0</RunTargetFramework>
<RunTargetFrameworks>net6.0;net7.0;net8.0;net9.0;net10.0</RunTargetFrameworks>
<RunTargetFramework>net11.0</RunTargetFramework>
<RunTargetFrameworks>net6.0;net7.0;net8.0;net9.0;net10.0;net11.0</RunTargetFrameworks>
</PropertyGroup>

</Project>
7 changes: 7 additions & 0 deletions global.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
{
"sdk": {
"version": "11.0.100-preview.7.26381.103",
"rollForward": "latestPatch",
"allowPrerelease": true
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,11 @@
&lt/div&gt;

// add ReconnectorOutlet component
<b><i>&lt;component type="typeof(ReconnectorOutlet)" param-AutoReconnect="true" render-mode="ServerPrerendered" /&gt;</i></b></Pre>
<b><i>&lt;ReconnectorOutlet AutoReconnect="true" ReconnectInterval="5000" @@rendermode="new InteractiveServerRenderMode(false)" /&gt;</i></b></Pre>

<p>组件参数 <code>AutoReconnect</code> 用于控制是否开启网络重连,默认 <code>true</code> 已开启,可以通过 <code>param-AutoReconnect="false"</code> 关闭</p>
<p><code>AutoReconnect</code> 用于控制是否在连接中断后自动检测服务是否恢复。默认 <code>true</code>;检测到服务恢复时,页面会自动重新加载。设置为 <code>false</code> 可关闭此行为。</p>

<p><code>ReconnectInterval</code> 用于设置检测间隔,默认 <code>5000</code> 毫秒,最小值为 <code>1000</code> 毫秒。</p>

<p>@((MarkupString)Localizer["Step2"].Value)</p>

Expand Down Expand Up @@ -269,3 +271,5 @@
&lt;/ReconnectRejectedTemplate&gt;</Pre>

<AttributeTable Type="typeof(Reconnector)" />

<AttributeTable Type="typeof(ReconnectorOutlet)" />
4 changes: 2 additions & 2 deletions src/BootstrapBlazor.Server/Dockerfile
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
#Depending on the operating system of the host machines(s) that will build or run the containers, the image specified in the FROM statement may need to be changed.
#For more information, please see https://aka.ms/containercompat

FROM mcr.microsoft.com/dotnet/aspnet:10.0 AS base
FROM mcr.microsoft.com/dotnet/aspnet:11.0-preview AS base
WORKDIR /app
EXPOSE 8080

Expand All @@ -11,7 +11,7 @@ RUN apt install -y ./google-chrome-stable_current_amd64.deb
RUN rm ./google-chrome-stable_current_amd64.deb
RUN apt install -y fonts-wqy-microhei

FROM mcr.microsoft.com/dotnet/sdk:10.0 AS build
FROM mcr.microsoft.com/dotnet/sdk:11.0-preview AS build
WORKDIR /
COPY . .

Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
@namespace BootstrapBlazor.Components
@inherits BootstrapModuleComponentBase
@attribute [BootstrapModuleAutoLoader("Reconnector/ReconnectorContent.razor.js", AutoInvokeDispose = false)]
@attribute [BootstrapModuleAutoLoader("Reconnector/ReconnectorContent.razor.js")]

<div id="components-reconnect-modal" data-nosnippet>
<div class="reconnect-state show">
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -67,7 +67,7 @@ protected override async Task InvokeInitAsync()
{
if (AutoReconnect)
{
await InvokeVoidAsync("reconnect", Math.Max(1000, ReconnectInterval));
await InvokeVoidAsync("init", Id, Math.Max(1000, ReconnectInterval));
}
}

Expand Down
113 changes: 90 additions & 23 deletions src/BootstrapBlazor/Components/Reconnector/ReconnectorContent.razor.js
Original file line number Diff line number Diff line change
@@ -1,26 +1,93 @@
export function reconnect(interval) {
const reconnectHandler = setInterval(async () => {
const com = document.getElementById('components-reconnect-modal')
if (com) {
if (com.classList.length === 0 || com.classList.contains('components-reconnect-hide')) {
return
}
else {
clearInterval(reconnectHandler)

async function attemptReload() {
try {
await fetch('')
if (reloadHandler) {
clearInterval(reloadHandler)
}
location.reload()
}
catch { }
}
await attemptReload()
const reloadHandler = setInterval(attemptReload, interval)
import EventHandler from "../../modules/event-handler.js"
import Data from "../../modules/data.js"

export function init(id, interval) {
dispose(id);

const modal = document.getElementById('components-reconnect-modal');
if (modal === null) {
return;
}

let reloadHandler;
let reloadInProgress = false;
let disposed = false;

const stopReloading = () => {
if (reloadHandler !== undefined) {
clearInterval(reloadHandler);
reloadHandler = undefined;
}
};

const attemptReload = async () => {
if (disposed || reloadInProgress) {
return;
}

try {
const response = await fetch('', { cache: 'no-store' });
if (!disposed && response.ok) {
reloadInProgress = true;
stopReloading();
location.reload();
}
}
}, interval)
catch {
}
};

const startReloading = () => {
if (reloadHandler !== undefined) {
return;
}

reloadHandler = setInterval(attemptReload, interval);
void attemptReload();
};

const updateReloading = () => {
if (modal.classList.length === 0 || modal.classList.contains('components-reconnect-hide')) {
stopReloading();
}
else {
startReloading();
}
};

const stateChanged = event => {
if (event.detail?.state === 'hide') {
stopReloading();
}
else {
startReloading();
}
};

const observer = new MutationObserver(updateReloading);
observer.observe(modal, { attributes: true, attributeFilter: ['class'] });
EventHandler.on(modal, 'components-reconnect-state-changed.bb.reconnector', stateChanged);

Data.set(id, {
modal,
observer,
stateChanged,
dispose: () => {
disposed = true;
stopReloading();
}
});
updateReloading();
}

export function dispose(id) {
const reconnector = Data.get(id);
if (reconnector === null) {
return;
}

Data.remove(id);
reconnector.observer.disconnect();
EventHandler.off(reconnector.modal, 'components-reconnect-state-changed.bb.reconnector', reconnector.stateChanged);
reconnector.dispose();
}
12 changes: 11 additions & 1 deletion src/BootstrapBlazor/Directory.Build.props
Original file line number Diff line number Diff line change
Expand Up @@ -27,6 +27,7 @@
<NET8Version>8.0.*</NET8Version>
<NET9Version>9.0.*</NET9Version>
<NET10Version>10.0.0</NET10Version>
<NET11Version>11.0.0-rc.*</NET11Version>
</PropertyGroup>

<ItemGroup Condition="'$(TargetFramework)' == 'net6.0'">
Expand Down Expand Up @@ -75,7 +76,16 @@
<PackageReference Include="Microsoft.Extensions.Http" Version="$(NET10Version)" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="$(NET10Version)" />
</ItemGroup>


<ItemGroup Condition="'$(TargetFramework)' == 'net11.0'">
<PackageReference Include="Microsoft.AspNetCore.Components.Authorization" Version="$(NET11Version)" />
<PackageReference Include="Microsoft.AspNetCore.Components.Web" Version="$(NET11Version)" />
<PackageReference Include="Microsoft.Extensions.Caching.Memory" Version="$(NET11Version)" />
<PackageReference Include="Microsoft.Extensions.Configuration.Json" Version="$(NET11Version)" />
<PackageReference Include="Microsoft.Extensions.Http" Version="$(NET11Version)" />
<PackageReference Include="Microsoft.Extensions.Localization" Version="$(NET11Version)" />
</ItemGroup>

<ItemGroup>
<SupportedPlatform Include="browser" />
</ItemGroup>
Expand Down
Loading