Activities of "rcalv002"

Hi Mali,

Thanks for your suggestion. AbpScriptsRenderMode worked as suggestion and the exception is gone

we are on Blazor WebApp with Parameters.InteractiveAuto = true and the standard bundle wiring, exactly as your reference, we checked by creating new project in web app mode to check before we ported from server to wasm pages. The divergence is a single page that is intentionally WebAssembly-only (new InteractiveWebAssemblyRenderMode(prerender: false)) rather than Interactive Auto, and that's the page that hits the race.

Why this page is WASM-only (prerender:false), not Auto by design, not oversight.

This page must not do the Interactive Auto server-first → WASM transition:

  • Its page-local UI services are registered only in the .Blazor.Client project. An Interactive Auto page renders server-first on a cold cache, which would require those client-only services (one of them an internal type) to also be registered server-side — which we can't do without a .Blazor.Server → .Blazor.Client reference we deliberately don't have.
  • The page is also required to run with no server-side /_blazor circuit it should be pure WebAssembly, not a server circuit that later hands off to WASM.

So InteractiveWebAssemblyRenderMode(prerender: false) is the correct, intended render mode for it. That is precisely the mode in which the abp/LeptonX bundle is not prerendered, so on this page <AbpScripts> (whose @rendermode follows the page's) emits the bundle only after WASM activation. Your template doesn't reproduce it only because the default has no genuinely WASM-only page; the moment a page is WASM-only, SideMenuLayout races the bundle.

(1) App.razor — <AbpScripts> wiring:

<AbpScripts BundleName="@BlazorLeptonXThemeBundles.Scripts.Global"
            WebAssemblyScriptFiles="GlobalScripts"
            @rendermode="PageRenderMode" />

@code {
    // Per-route render mode. The affected page is WASM-only, so for it
    // PageRenderMode resolves to InteractiveWebAssemblyRenderMode(prerender:false).
    private IComponentRenderMode PageRenderMode =>
        IsWasmOnlyRoute ? new InteractiveWebAssemblyRenderMode(prerender: false)
        : IsAutoRoute   ? InteractiveAuto
                        : InteractiveServer;

    private List<string> GlobalScripts => ["global.js", "global-scripts.js"];
}

The routed page renders the same way: <ClientRoutes @rendermode="@(new InteractiveWebAssemblyRenderMode(prerender: false))" />.

(2) Configure<AbpBundlingOptions> note InteractiveAuto = true is present:

Configure<AbpBundlingOptions>(options =>
{
    options.Parameters["LeptonXTheme.Layout"] = "side-menu";
    options.Parameters.InteractiveAuto = true;   // present

    options.ScriptBundles.Configure(
        BlazorLeptonXThemeBundles.Scripts.Global,
        bundle => bundle.AddFiles("/global-scripts.js"));

    options.StyleBundles.Configure(
        BlazorLeptonXThemeBundles.Styles.Global,
        bundle => bundle.AddFiles("/blazor-global-styles.css"));
    // (MVC bundles omitted)
});

(3) Template: Blazor WebApp (non-tiered), LeptonX side-menu, OpenIddict in-host, .NET 10, ABP 10.4.1, LeptonX 5.4.1

A minimal repro isolating the framework layout.

To rule out our own code, we ran a controlled A/B: two trivial pages with identical content and the same InteractiveWebAssemblyRenderMode(prerender:false) only the layout differs:

  • Under SideMenuLayout → crashes on cold direct load (the JSException storm → fatal error bar).
  • Under a bare/empty layout → loads cleanly, no exceptions.

Same render mode, same bundle wiring; only the layout differs which isolates SideMenuLayout / LeptonXStyleProvider as the cause, independent of our app code.

What we're asking.

a. Framework hardening: can SideMenuLayout / LeptonXStyleProvider feature-detect window.abp (and the LeptonX globals), or await a "scripts ready" signal, before the cookie / addClassToTag / initLeptonX interop so a genuinely WASM-only page initializes the layout once, cleanly, after the bundle lands?

b. Supported workaround meanwhile: is there a supported way to get the abp/LeptonX bundle into the initial HTML for a WASM-only page without introducing a /_blazor server circuit on it (which, per above, this page must not have)? For example, prerendering only the <AbpScripts> tags while the routed page stays prerender:false WASM-only. If decoupling <AbpScripts>'s render mode from the page is the intended approach, we'd want to confirm it doesn't create a circuit or an asset-swap conflict.

[AI-Bot] said:


This response was generated by AI. If it didn’t solve your problem, feel free to post a new answer — our support team will jump in to help you soon.

theres no content

We too are waiting on abp delivered pro module for elsa, we'd love to offload our other workflow solutions to an integrated abp module.

It doesn't get back to the app because of the URI issue, so what we need to figure out is how to have domain tenant resolver enabled, and not have to create a new redirect URI (tenantx.app.mydomain.com) every time in our azure app for every new tenant. Is it possible to have it always come back to app.mydomain.com and go from there?

[10:27:38 INF] Executing endpoint '/Account/Login'
[10:27:38 INF] Route matched with {page = "/Account/Login", action = "", controller = "", area = ""}. Executing page /Account/Login
[10:27:38 INF] Skipping the execution of current filter as its not the most effective filter implementing the policy Microsoft.AspNetCore.Mvc.ViewFeatures.IAntiforgeryPolicy
[10:27:38 INF] Executing handler method Volo.Abp.Account.Public.Web.Pages.Account.LoginModel.OnPostExternalLogin - ModelState is Invalid
[10:27:38 INF] Executed handler method OnPostExternalLogin, returned result Microsoft.AspNetCore.Mvc.ChallengeResult.
[10:27:38 INF] Executing ChallengeResult with authentication schemes (["Microsoft"]).
[10:27:38 INF] AuthenticationScheme: Microsoft was challenged.
[10:27:38 INF] Executed page /Account/Login in 9.9514ms
[10:27:38 INF] Executed endpoint '/Account/Login'
[10:27:38 INF] Request finished HTTP/1.1 POST https://tenant1.app.mydomain.com/Account/Login?returnUrl=https%3A%2F%2Ftenant1.app.mydomain.com%2F%3Fpage%3D%252FAccount%252F~%252FAccount%252FLogin&handler=ExternalLogin - 302 0 null 27.1038ms

Seems correct!

Sorry, my question is targeted at removing migrations from many tenants.

If we have many tenants, manually running a rollback for each is unfeasible, is the approach to extend db migrator (why isnt there a flag for this already) or to keep track of how many tenants there are and update a script rollback?

Yes

Fix for this was to add the snippet below in main app blazor module

Configure<AbpAspNetCoreContentOptions>(options =>
 {
     options.ContentTypeMaps.Add(".mjs", "application/javascript");
 });

The above lets the system load the purify and marked modules we copied into /ai-libs

And update the path of module imports in razor components in your submodule

protected override async Task OnAfterRenderAsync(bool firstRender)
{
    if (firstRender)
    {
        try
        {
            var module = await JS.InvokeAsync<IJSObjectReference>("import", "/_content/yourmodule/Components/Chat/ChatInput.razor.js");
            await module.InvokeVoidAsync("init", textArea);
            await module.DisposeAsync();
        }
        catch (JSDisconnectedException)
        {
        }
    }
}

It was missing the / before _content

Showing 1 to 10 of 86 entries
Boost Your Development
ABP Live Training
Packages
See Trainings
Mastering ABP Framework Book
The Official Guide
Mastering
ABP Framework
Learn More
Mastering ABP Framework Book
Made with ❤️ on ABP v10.8.0-preview. Updated on October 21, 2026, 11:09
1
ABP Assistant
🔐 You need to be logged in to use the chatbot. Please log in first.