Starts in:
2 DAYS
3 HRS
16 MIN
12 SEC
Starts in:
2 D
3 H
16 M
12 S

Activities of "dhill"

  • ABP Framework version: v8.2.0
  • UI Type: Blazor Server
  • Database System: EF Core
  • **Azure Web App with AzureSignalR We've successfully implemented subdomain tenant mapping. However, when using linked accounts the subdomain does not change when the tenant change happens. How can we get the subdomain url to reflect the change in tentant?

Here is our WebModule configuration.

        PreConfigure<OpenIddictBuilder>(builder =>
        {
            _ = builder.AddValidation(options =>
            {
                _ = options.AddAudiences("SafetyPlusWeb");
                _ = options.UseLocalServer();
                _ = options.UseAspNetCore();
            });
        });

        if (!hostingEnvironment.IsDevelopment())
        {
            PreConfigure<AbpOpenIddictAspNetCoreOptions>(options =>
            {
                options.AddDevelopmentEncryptionAndSigningCertificate = false;
            });

            PreConfigure<OpenIddictServerBuilder>(serverBuilder =>
            {
                // In production, it is recommended to use two RSA certificates, 
                // one for encryption, one for signing.
                _ = serverBuilder.AddEncryptionCertificate(
                        GetEncryptionCertificate(context.Services.GetConfiguration()));
                _ = serverBuilder.AddSigningCertificate(
                        GetSigningCertificate(context.Services.GetConfiguration()));
            });

            var domainFormat = GetDomainFormatForEnvironment(hostingEnvironment);
            PreConfigure<AbpOpenIddictWildcardDomainOptions>(options =>
            {
                options.EnableWildcardDomainSupport = true;
                _ = options.WildcardDomainsFormat.Add($"https://{domainFormat}");
                _ = options.WildcardDomainsFormat.Add($"https://{domainFormat}/signin-oidc");
                _ = options.WildcardDomainsFormat.Add($"https://{domainFormat}/signout-callback-oidc");
            });
        }
    }

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        var hostingEnvironment = context.Services.GetHostingEnvironment();
        var configuration = context.Services.GetConfiguration();

        var domainFormat = GetDomainFormatForEnvironment(hostingEnvironment);

        Configure<AbpTenantResolveOptions>(options =>
        {
            options.AddDomainTenantResolver(domainFormat);
        });

        if (!configuration.GetValue<bool>("App:DisablePII"))
        {
            Microsoft.IdentityModel.Logging.IdentityModelEventSource.ShowPII = true;
        }

        if (!configuration.GetValue<bool>("AuthServer:RequireHttpsMetadata"))
        {
            Configure<OpenIddictServerAspNetCoreOptions>(options =>
            {
                options.DisableTransportSecurityRequirement = true;
            });
        }

        if (!hostingEnvironment.IsDevelopment())
        {
            _ = context.Services.AddSignalR(options =>
            {
                options.AddFilter<AbpMultiTenantHubFilter>();
            }).AddAzureSignalR();
        }

        ConfigureOptions(context, configuration);
        ConfigureAuthentication(context);
        ConfigureUrls(configuration);
        ConfigureBundles();
        ConfigureImpersonation(context, configuration);
        ConfigureAutoMapper();
        ConfigureVirtualFileSystem(hostingEnvironment);
        ConfigureMultiTenancy();
        ConfigureSwaggerServices(context.Services);
        ConfigureExternalProviders(context, configuration);
        ConfigureAutoApiControllers();
        ConfigureBlazorise(context);
        ConfigureRouter(context);
        ConfigureMenu(context);
        ConfigureCookieConsent(context);
        ConfigureAuditingOptions(context);
        ConfigureTheme();

        Configure<SettingManagementComponentOptions>(options =>
        {
            options.Contributors.Add(new SafetyPlusWebSettingsComponentContributor());
        });

        if (!hostingEnvironment.IsDevelopment())
        {
            Configure<AbpTenantResolveOptions>(options =>
            {
                options.AddDomainTenantResolver(domainFormat);
            });
        }
    }
    ```
  • ABP Framework version: v8.0.4
  • UI Type: Blazor Server
  • Database System: EF Core (SQL Server)

Is it possible to bypass the "My Account" page with the linked account module and instead return directly to the previously opened page?

Question
  • ABP Framework version: v8.0.4
  • UI Type: Blazor Server
  • Database System: EF Core (SQL Server)

Is it possible to seed linked accounts to a new user. For example allowing a support user to login to any account using linked accounts.

  • ABP Framework version: v8.0.4
  • UI Type: Blazor Server
  • Database System: EF Core (SQL Server) - Azure Blob Storage
  • Steps to reproduce the issue:

We need to permission role based access to files and folders in the File Management module. Can you please provide any recommendations on how to accomplish?

Thanks

  • ABP Framework version: v8.0.3
  • UI Type: Blazor Server
  • Database System: EF Core
  • Tiered (for MVC) or Auth Server Separated (for Angular): no
  • Exception message and full stack trace: [22:23:24 INF] Starting transport. Transfer mode: Binary. Url: 'wss://[redacted].net/server/?hub=componenthub&cid=b826b8b2-f61a-4eca-aceb-570d28b1beea'. [22:23:24 INF] Now listening on: https://localhost:44354 [22:23:24 INF] Application started. Press Ctrl+C to shut down. [22:23:24 INF] Hosting environment: Development [22:23:24 INF] Content root path: C:\source\SafetyPlusWeb-ABP-App\src\SafetyPlusWeb.Blazor [22:23:24 INF] Service connection b754b5d0-3341-455f-a53a-c35e4b99badd connected. [22:23:24 INF] Service connection b0e6ab7c-ab87-418c-b7e8-571e49128571 connected. [22:23:24 INF] Service connection 1eefadc0-d1f9-4b40-8ade-7036c804dd48 connected. [22:23:24 INF] Service connection b826b8b2-f61a-4eca-aceb-570d28b1beea connected. [22:23:24 INF] Service connection e6d301b3-dec9-4f2b-bb98-04f2fac7a3b7 connected. [22:23:24 INF] Service connection 67b14799-a667-4605-9b09-e935d11b66d0 connected. [22:23:24 INF] Service connection 590415e4-9ade-4d06-991e-7d230b12fa90 connected. [22:23:24 INF] Service connection 55026f85-f28c-48bb-aaf5-6540b7be5bcd connected. [22:23:24 INF] Service connection 4a5f4738-d8fa-4f09-88cd-0c8109fbcbb8 connected. [22:23:24 INF] Service connection 998eadd8-103a-4566-889d-7c58bc258adc connected. [22:23:24 INF] Hub 'ComponentHub' is now connected to '(Primary)https://[redacted].net(hub=ComponentHub)'. [22:23:24 INF] Hub 'Chat' is now connected to '(Primary)https://[redacted].net(hub=Chat)'. [22:23:25 INF] Request starting HTTP/2 GET https://localhost:44354/ - null null [22:23:26 DBG] The event OpenIddict.Validation.OpenIddictValidationEvents+ProcessRequestContext was successfully processed by OpenIddict.Validation.AspNetCore.OpenIddictValidationAspNetCoreHandlers+ResolveRequestUri. [22:23:26 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ResolveRequestUri. [22:23:26 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.OpenIddictServerHandlers+InferEndpointType. [22:23:26 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by Volo.Abp.Account.Web.Pages.Account.OpenIddictImpersonateInferEndpointType. [22:23:26 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateTransportSecurityRequirement. [22:23:26 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateHostHeader. [22:23:27 DBG] Get dynamic claims cache for user: 1b711166-ebd0-3844-d68c-3a10b547d0e1 [22:23:27 DBG] Filling dynamic claims cache for user: 1b711166-ebd0-3844-d68c-3a10b547d0e1 [22:23:30 INF] Executing endpoint '/_Host' [22:23:30 INF] Route matched with {page = "/_Host", area = "", action = "", controller = ""}. Executing page /_Host [22:23:30 INF] Skipping the execution of current filter as its not the most effective filter implementing the policy Microsoft.AspNetCore.Mvc.ViewFeatures.IAntiforgeryPolicy [22:23:30 INF] Executing an implicit handler method - ModelState is Valid [22:23:30 INF] Executed an implicit handler method, returned result Microsoft.AspNetCore.Mvc.RazorPages.PageResult. [22:23:30 DBG] Added bundle 'Blazor.LeptonXTheme.Global' to the page in 27.18 ms. [22:23:30 DBG] Added bundle 'Blazor.LeptonXTheme.Global' to the page in 21.59 ms. [22:23:30 INF] Executed page /_Host in 295.7205ms [22:23:30 INF] Executed endpoint '/_Host' [22:23:30 INF] Request starting HTTP/2 GET https://localhost:44354/_framework/aspnetcore-browser-refresh.js - null null [22:23:30 INF] Request finished HTTP/2 GET https://localhost:44354/ - 200 null text/html; charset=utf-8 5275.9564ms [22:23:30 INF] Request finished HTTP/2 GET https://localhost:44354/_framework/aspnetcore-browser-refresh.js - 200 13776 application/javascript; charset=utf-8 15.3575ms [22:23:30 INF] Request starting HTTP/2 GET https://localhost:44354/_vs/browserLink - null null [22:23:30 INF] Request starting HTTP/2 GET https://localhost:44354/_blazor/initializers - null null [22:23:30 DBG] The event OpenIddict.Validation.OpenIddictValidationEvents+ProcessRequestContext was successfully processed by OpenIddict.Validation.AspNetCore.OpenIddictValidationAspNetCoreHandlers+ResolveRequestUri. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ResolveRequestUri. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.OpenIddictServerHandlers+InferEndpointType. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by Volo.Abp.Account.Web.Pages.Account.OpenIddictImpersonateInferEndpointType. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateTransportSecurityRequirement. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateHostHeader. [22:23:30 INF] Request finished HTTP/2 GET https://localhost:44354/_vs/browserLink - 200 null text/javascript; charset=UTF-8 86.6061ms [22:23:30 DBG] Get dynamic claims cache for user: 1b711166-ebd0-3844-d68c-3a10b547d0e1 [22:23:30 INF] Executing endpoint 'Blazor initializers' [22:23:30 INF] Executed endpoint 'Blazor initializers' [22:23:30 INF] Request finished HTTP/2 GET https://localhost:44354/_blazor/initializers - 200 null application/json; charset=utf-8 94.4373ms [22:23:30 INF] Request starting HTTP/2 POST https://localhost:44354/_blazor/negotiate?negotiateVersion=1 - null 0 [22:23:30 DBG] The event OpenIddict.Validation.OpenIddictValidationEvents+ProcessRequestContext was successfully processed by OpenIddict.Validation.AspNetCore.OpenIddictValidationAspNetCoreHandlers+ResolveRequestUri. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ResolveRequestUri. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.OpenIddictServerHandlers+InferEndpointType. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by Volo.Abp.Account.Web.Pages.Account.OpenIddictImpersonateInferEndpointType. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateTransportSecurityRequirement. [22:23:30 DBG] The event OpenIddict.Server.OpenIddictServerEvents+ProcessRequestContext was successfully processed by OpenIddict.Server.AspNetCore.OpenIddictServerAspNetCoreHandlers+ValidateHostHeader. [22:23:30 DBG] Get dynamic claims cache for user: 1b711166-ebd0-3844-d68c-3a10b547d0e1 [22:23:30 INF] Executing endpoint '/_blazor/negotiate' [22:23:30 INF] Use default handshake timeout. [22:23:30 INF] Executed endpoint '/_blazor/negotiate' [22:23:30 ERR] An unhandled exception has occurred while executing the request. System.NullReferenceException: Object reference not set to an instance of an object. at Microsoft.Azure.SignalR.NegotiateHandler1.BuildClaims(HttpContext context) at Microsoft.Azure.SignalR.NegotiateHandler1.Process(HttpContext context) at Microsoft.Azure.SignalR.ServiceRouteHelper.RedirectToService[THub](HttpContext context, IList1 authorizationData) at Microsoft.Azure.SignalR.NegotiateMatcherPolicy.<>c__71.<b__7_0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Routing.EndpointMiddleware.g__AwaitRequestTask|7_0(Endpoint endpoint, Task requestTask, ILogger logger) at Volo.Abp.AspNetCore.Serilog.AbpSerilogMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Auditing.AbpAuditingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Swashbuckle.AspNetCore.SwaggerUI.SwaggerUIMiddleware.Invoke(HttpContext httpContext) at Swashbuckle.AspNetCore.Swagger.SwaggerMiddleware.Invoke(HttpContext httpContext, ISwaggerProvider swaggerProvider) at Microsoft.AspNetCore.Authorization.AuthorizationMiddleware.Invoke(HttpContext context) at Volo.Abp.AspNetCore.Security.Claims.AbpDynamicClaimsMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Uow.AbpUnitOfWorkMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.MultiTenancy.MultiTenancyMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Builder.ApplicationBuilderAbpOpenIddictMiddlewareExtension.<>c__DisplayClass0_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Authentication.AuthenticationMiddleware.Invoke(HttpContext context) at Volo.Abp.AspNetCore.Security.AbpSecurityHeadersMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Volo.Abp.AspNetCore.Tracing.AbpCorrelationIdMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Localization.RequestLocalizationMiddleware.Invoke(HttpContext context) at Microsoft.AspNetCore.RequestLocalization.AbpRequestLocalizationMiddleware.InvokeAsync(HttpContext context, RequestDelegate next) at Microsoft.AspNetCore.Builder.UseMiddlewareExtensions.InterfaceMiddlewareBinder.<>c__DisplayClass2_0.<b__0>d.MoveNext() --- End of stack trace from previous location --- at Microsoft.AspNetCore.Diagnostics.DeveloperExceptionPageMiddlewareImpl.Invoke(HttpContext context) [22:23:30 INF] Request finished HTTP/2 POST https://localhost:44354/_blazor/negotiate?negotiateVersion=1 - 500 null text/plain; charset=utf-8 142.9569ms
  • Steps to reproduce the issue:

Trying to add AzureSignalR by following these articles https://support.abp.io/QA/Questions/2054/Using-Azure-SignalR-backplane-for-abp-Blazor-app https://support.abp.io/QA/Questions/4993/Issue-Implementing-Azure%27s-Managed-SignalR-service-with-an-ABP-Blazor-Server-application

Current configuration

    public override void ConfigureServices(ServiceConfigurationContext context)
    {
        var hostingEnvironment = context.Services.GetHostingEnvironment();
        var configuration = context.Services.GetConfiguration();

        context.Services.AddSignalR(options =>
        {
            options.AddFilter<AbpMultiTenantHubFilter>();
        })
        .AddAzureSignalR(options =>
        {
            options.ServerStickyMode = Microsoft.Azure.SignalR.ServerStickyMode.Required;
            options.ClaimsProvider = context => new[]
            {
            new Claim(ClaimTypes.NameIdentifier, "testing123")
        };
            options.ConnectionString = "Endpoint=[redacted]";
        });
       .......
 }

public class AbpMultiTenantHubFilter : IHubFilter
{
    public virtual async ValueTask<object?> InvokeMethodAsync(HubInvocationContext invocationContext, Func<HubInvocationContext, ValueTask<object?>> next)
    {
        var currentPrincipalAccessor = invocationContext.ServiceProvider.GetRequiredService<ICurrentPrincipalAccessor>();
        if (invocationContext.Context.User == null)
            throw new NullReferenceException(nameof(invocationContext.Context.User));
        
        using (currentPrincipalAccessor.Change(invocationContext.Context.User))
        {
            var tenantId = currentPrincipalAccessor.Principal.FindTenantId();
            string? tenantName = null;
            if (tenantId != null)
            {
                tenantName = (await invocationContext.ServiceProvider.GetRequiredService<ITenantStore>().FindAsync(tenantId.Value))?.Name;
            }
            using (invocationContext.ServiceProvider.GetRequiredService<ICurrentTenant>().Change(currentPrincipalAccessor.Principal.FindTenantId(), tenantName))
            {
                return await next(invocationContext);
            }
        }
    }

    public virtual Task OnConnectedAsync(HubLifetimeContext context, Func<HubLifetimeContext, Task> next)
    {
        return Task.CompletedTask;
    }

    public virtual Task OnDisconnectedAsync(HubLifetimeContext context, Exception? exception, Func<HubLifetimeContext, Exception, Task> next)
    {
        return Task.CompletedTask;
    }
}
  • ABP Framework version: v8.0.2
  • UI Type: Blazor Server
  • Database System: EF Core (SQL Server)
  • Steps to reproduce the issue:

We built a button dropdown component designed to control visibility of columns on the Blazorise DataGrid.

This component works fine when embedded in the body of the page. We would like to move the button to the Toolbar to keep the look and feel consistent.

We are having trouble figuring out how to access event callbacks from the toolbar contributor.

We try to add the component like this but the event callbacks don't work.

        var arguments = new Dictionary&lt;string, object?&gt;();
        arguments.Add("SelectAllCheckedValue", SelectAllCheckedValue);
        arguments.Add("TestDateCheckedValue", TestDateCheckedValue);
        arguments.Add("AttachmentsCheckedValue", AttachmentsCheckedValue);
        arguments.Add("AttachmentsCheckedValueChanged", AttachmentsCheckedValueChanged);
        Toolbar.AddComponent&lt;SubstanceAbuseTestsDataGridColumnVisibilityComponent&gt;(arguments);

Here is the component referenced on the razor page.

    <DataGridColumnVisibilityComponent @bind-SelectAllCheckedValue=SelectAllCheckedValue
                                       @bind-TestDateCheckedValue=TestDateCheckedValue
                                       @bind-AttachmentsCheckedValue=AttachmentsCheckedValue />

Here is the code behind c#

protected bool TestDateCheckedValue { get; set; }

protected bool AttachmentsCheckedValue { get; set; }

protected bool SelectAllCheckedValue { get; set; }

protected async Task SetColumnVisibilityAsync()
{
    // ToDo bind cookie here
    SelectAllCheckedValue = true;
    TestDateCheckedValue = true;
    AttachmentsCheckedValue = true;
}        protected bool TestDateCheckedValue { get; set; }

protected bool AttachmentsCheckedValue { get; set; }

protected bool SelectAllCheckedValue { get; set; }

protected async Task SetColumnVisibilityAsync()
{
    // ToDo bind cookie here
    SelectAllCheckedValue = true;
    TestDateCheckedValue = true;
    AttachmentsCheckedValue = true;
}

Here is the component.

@page "/DataGridColumnVisibility"

<Dropdown>
    <DropdownToggle Color="Color.Primary">
        <Icon Name="IconName.Eye" /> Field Visibility
    </DropdownToggle>
    <DropdownMenu >
        <DropdownItem ShowCheckbox Checked="SelectAllCheckedValue" CheckedChanged="UpdateSelectAllCheckedValue">Select All</DropdownItem>
        <DropdownDivider />
         <DropdownItem ShowCheckbox Checked="TestDateCheckedValue" CheckedChanged="UpdateTestDateCheckedValue">Test Date</DropdownItem>
         <DropdownItem ShowCheckbox Checked="AttachmentsCheckedValue" CheckedChanged="UpdateAttachmentsCheckedValue">Attachments</DropdownItem>
    </DropdownMenu>
</Dropdown>

 @code {
    [Parameter]
    public bool SelectAllCheckedValue { get; set; }

    [Parameter]
    public EventCallback<bool> SelectAllCheckedValueChanged { get; set; }

    async Task UpdateSelectAllCheckedValue()
    {
        SelectAllCheckedValue = !SelectAllCheckedValue;
        TestDateCheckedValue = SelectAllCheckedValue;
        AttachmentsCheckedValue = SelectAllCheckedValue;

        await SelectAllCheckedValueChanged.InvokeAsync(SelectAllCheckedValue);
        await TestDateCheckedValueChanged.InvokeAsync(TestDateCheckedValue);
        await AttachmentsCheckedValueChanged.InvokeAsync(AttachmentsCheckedValue);
    }


    [Parameter]
    public bool TestDateCheckedValue { get; set; }

    [Parameter]
    public EventCallback<bool> TestDateCheckedValueChanged { get; set; }

    protected async Task UpdateTestDateCheckedValue()
    {
        TestDateCheckedValue = !TestDateCheckedValue;
        await TestDateCheckedValueChanged.InvokeAsync(TestDateCheckedValue);
    }

    [Parameter]
    public bool AttachmentsCheckedValue { get; set; }

    [Parameter]
    public EventCallback<bool> AttachmentsCheckedValueChanged { get; set; }

    protected async Task UpdateAttachmentsCheckedValue()
    {
        AttachmentsCheckedValue = !AttachmentsCheckedValue;
        await AttachmentsCheckedValueChanged.InvokeAsync(AttachmentsCheckedValue);
    }
}

We use this on the Displayable property of the DataGrid column

<DataGridColumn TItem="ExampleDto"
                 Field="TestDate"
                 Displayable=TestDateCheckedValue
                 Editable="true"
                 Caption="@L["TestDate"]">
     <DisplayTemplate>
         @context.TestDate.ToShortDateString()
    </DisplayTemplate>
</DataGridColumn>
    [Parameter]
    public EventCallback<bool> AttachmentsCheckedValueChanged { get; set; }

    protected async Task UpdateAttachmentsCheckedValue()
    {
        AttachmentsCheckedValue = !AttachmentsCheckedValue;
        await AttachmentsCheckedValueChanged.InvokeAsync(AttachmentsCheckedValue);
    }
}
Showing 11 to 16 of 16 entries
Made with ❤️ on ABP v9.1.0-preview. Updated on November 20, 2024, 13:06