Cool, resolved !
But is it possible not to modify the AdministrationService? In my product architecture, CmsKit will be offered as a separate MicroService like as ProductService. AdministrationService will do not reference other modules. If possible, I would like to resolve it in the ProductService.
OK, I sended.
and this is my code
ProductServiceDbContext .cs
using Microsoft.EntityFrameworkCore;
using XTC.BaaSo.ProductService.Products;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
using Volo.CmsKit.Newsletters;
using Volo.CmsKit.UrlShorting;
using Volo.CmsKit.Polls;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Users;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Ratings;
using Volo.CmsKit.Tags;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.GlobalResources;
namespace XTC.BaaSo.ProductService.EntityFrameworkCore;
[ConnectionStringName(ProductServiceDbProperties.ConnectionStringName)]
public class ProductServiceDbContext : AbpDbContext<ProductServiceDbContext>, ICmsKitProDbContext, ICmsKitDbContext
{
public DbSet<Product> Products { get; set; }
public DbSet<NewsletterRecord> NewsletterRecords { get; set; }
public DbSet<NewsletterPreference> NewsletterPreferences { get; set; }
public DbSet<ShortenedUrl> ShortenedUrls { get; set; }
public DbSet<Poll> Polls { get; set; }
public DbSet<PollUserVote> PollUserVotes { get; set; }
public DbSet<PollOption> PollOptions { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<CmsUser> User { get; set; }
public DbSet<UserReaction> Reactions { get; set; }
public DbSet<Rating> Ratings { get; set; }
public DbSet<Tag> Tags { get; set; }
public DbSet<EntityTag> EntityTags { get; set; }
public DbSet<Page> Pages { get; set; }
public DbSet<Blog> Blogs { get; set; }
public DbSet<BlogPost> BlogPosts { get; set; }
public DbSet<BlogFeature> BlogFeatures { get; set; }
public DbSet<MediaDescriptor> MediaDescriptors { get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
public DbSet<GlobalResource> GlobalResources { get; set; }
public ProductServiceDbContext(DbContextOptions<ProductServiceDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureProductService();
builder.ConfigureCmsKitPro();
builder.ConfigureCmsKit();
}
}
ProductServiceEntityFrameworkCoreModule.cs
using Microsoft.Extensions.DependencyInjection;
using XTC.BaaSo.ProductService.Products;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore.MySQL;
using Volo.Abp.Modularity;
using Volo.CmsKit.EntityFrameworkCore;
namespace XTC.BaaSo.ProductService.EntityFrameworkCore;
[DependsOn(
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(AbpEntityFrameworkCoreModule),
typeof(ProductServiceDomainModule)
)]
[DependsOn(typeof(CmsKitProEntityFrameworkCoreModule))]
public class ProductServiceEntityFrameworkCoreModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
ProductServiceEfCoreEntityExtensionMappings.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<ProductServiceDbContext>(options =>
{
options.ReplaceDbContext<ICmsKitDbContext>();
options.ReplaceDbContext<ICmsKitProDbContext>();
/* Remove "includeAllEntities: true" to create
* default repositories only for aggregate roots */
options.AddDefaultRepositories(includeAllEntities: true);
options.AddRepository<Product, EfCoreProductRepository>();
});
Configure<AbpDbContextOptions>(options =>
{
options.Configure<ProductServiceDbContext>(c =>
{
c.UseMySQL(b =>
{
b.MigrationsHistoryTable("__ProductService_Migrations");
});
});
});
}
}
I saw the code of migrations, but not found nothing about CmsBlogs
using System;
using Microsoft.EntityFrameworkCore.Migrations;
#nullable disable
namespace XTC.BaaSo.ProductService.Migrations
{
/// <inheritdoc />
public partial class CMSKit : Migration
{
/// <inheritdoc />
protected override void Up(MigrationBuilder migrationBuilder)
{
migrationBuilder.CreateTable(
name: "NewsletterRecords",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "Polls",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "PollUserVotes",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "ShortenedUrls",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "NewsletterPreferences",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateTable(
name: "PollOptions",
columns: table => new
{
...
},
constraints: table =>
{
...
})
.Annotation("MySql:CharSet", "utf8mb4");
migrationBuilder.CreateIndex(
name: "IX_NewsletterPreferences_NewsletterRecordId",
table: "NewsletterPreferences",
column: "NewsletterRecordId");
migrationBuilder.CreateIndex(
name: "IX_PollOptions_PollId",
table: "PollOptions",
column: "PollId");
}
/// <inheritdoc />
protected override void Down(MigrationBuilder migrationBuilder)
{
migrationBuilder.DropTable(
name: "NewsletterPreferences");
migrationBuilder.DropTable(
name: "PollOptions");
migrationBuilder.DropTable(
name: "PollUserVotes");
migrationBuilder.DropTable(
name: "ShortenedUrls");
migrationBuilder.DropTable(
name: "NewsletterRecords");
migrationBuilder.DropTable(
name: "Polls");
}
}
}
Hi, liangshiwei
dotnet ef migrations add CMSKit
at ProductService.EntityFrameworkCore[12:16:23 ERR] An exception occurred while iterating over the results of a query for context type 'XTC.BaaSo.ProductService.EntityFrameworkCore.ProductServiceDbContext'. MySqlConnector.MySqlException (0x80004005): Table 'BaaSo_Product.CmsBlogs' doesn't exist at MySqlConnector.Core.ServerSession.ReceiveReplyAsyncAwaited(ValueTask`1 task) in
Check the docs before asking a question: https://docs.abp.io/en/commercial/latest/ Check the samples to see the basic tasks: https://docs.abp.io/en/commercial/latest/samples/index The exact solution to your question may have been answered before, and please first use the search on the homepage. Provide us with the following info:
[14:28:42 INF] Request starting HTTP/1.1 GET https://localhost:44360/api/cms-kit-public/pages?api-version=1.0 - 0
[14:28:42 INF] Executing endpoint 'Volo.CmsKit.Public.Pages.PagesPublicController.FindDefaultHomePageAsync (Volo.CmsKit.Public.HttpApi)'
[14:28:42 INF] Route matched with {area = "cms-kit", action = "FindDefaultHomePage", controller = "PagesPublic"}. Executing controller action with signature System.Threading.Tasks.Task`1[Volo.CmsKit.Contents.PageDto] FindDefaultHomePageAsync() on controller Volo.CmsKit.Public.Pages.PagesPublicController (Volo.CmsKit.Public.HttpApi).
[14:28:43 ERR] ---------- RemoteServiceErrorInfo ----------
{
"code": null,
"message": "An internal error occurred during your request!",
"details": null,
"data": {
"ActivatorChain": "Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext -> λ:Microsoft.EntityFrameworkCore.DbContextOptions`1[[Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext, Volo.CmsKit.EntityFrameworkCore, Version=7.3.2.0, Culture=neutral, PublicKeyToken=null]]"
},
"validationErrors": null
}
[14:28:43 ERR] An exception was thrown while activating Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext -> λ:Microsoft.EntityFrameworkCore.DbContextOptions`1[[Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext, Volo.CmsKit.EntityFrameworkCore, Version=7.3.2.0, Culture=neutral, PublicKeyToken=null]].
Autofac.Core.DependencyResolutionException: An exception was thrown while activating Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext -> λ:Microsoft.EntityFrameworkCore.DbContextOptions`1[[Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext, Volo.CmsKit.EntityFrameworkCore, Version=7.3.2.0, Culture=neutral, PublicKeyToken=null]].
---> Volo.Abp.AbpException: No configuration found for Microsoft.EntityFrameworkCore.DbContext, Microsoft.EntityFrameworkCore, Version=7.0.2.0, Culture=neutral, PublicKeyToken=adb9793829ddae60! Use services.Configure<AbpDbContextOptions>(...) to configure it.
at Volo.Abp.EntityFrameworkCore.DependencyInjection.DbContextOptionsFactory.Configure[TDbContext](AbpDbContextOptions options, AbpDbContextConfigurationContext`1 context)
at Volo.Abp.EntityFrameworkCore.DependencyInjection.DbContextOptionsFactory.Create[TDbContext](IServiceProvider serviceProvider)
at Autofac.Extensions.DependencyInjection.AutofacRegistration.<>c__DisplayClass3_0.<Register>b__0(IComponentContext context, IEnumerable`1 parameters)
at Autofac.Core.Activators.Delegate.DelegateActivator.ActivateInstance(IComponentContext context, IEnumerable`1 parameters)
at Autofac.Core.Activators.Delegate.DelegateActivator.<ConfigurePipeline>b__2_0(ResolveRequestContext ctxt, Action`1 next)
at Autofac.Core.Resolving.Middleware.DelegateMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.DisposalTrackingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
--- End of inner exception stack trace ---
at Autofac.Core.Resolving.Middleware.ActivatorErrorHandlingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.RegistrationPipelineInvokeMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.SharingMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.Middleware.CircularDependencyDetectorMiddleware.Execute(ResolveRequestContext context, Action`1 next)
at Autofac.Core.Resolving.Pipeline.ResolvePipelineBuilder.<>c__DisplayClass14_0.<BuildPipeline>b__1(ResolveRequestContext ctxt)
at Autofac.Core.Pipeline.ResolvePipeline.Invoke(ResolveRequestContext ctxt)
at Autofac.Core.Resolving.ResolveOperation.GetOrCreateInstance(ISharingLifetimeScope currentOperationScope, ResolveRequest request)
at Autofac.Core.Resolving.ResolveOperation.ExecuteOperation(ResolveRequest request)
at Autofac.Core.Resolving.ResolveOperation.Execute(ResolveRequest request)
at Autofac.Core.Lifetime.LifetimeScope.ResolveComponent(ResolveRequest request)
at Autofac.ResolutionExtensions.TryResolveService(IComponentContext context, Service service, IEnumerable`1 parameters, Object& instance)
at Autofac.ResolutionExtensions.ResolveService(IComponentContext context, Service service, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType, IEnumerable`1 parameters)
at Autofac.ResolutionExtensions.Resolve(IComponentContext context, Type serviceType)
at Autofac.Extensions.DependencyInjection.AutofacServiceProvider.GetRequiredService(Type serviceType)
at Microsoft.Extensions.DependencyInjection.ServiceProviderServiceExtensions.GetRequiredService[T](IServiceProvider provider)
at Volo.Abp.Uow.EntityFrameworkCore.UnitOfWorkDbContextProvider`1.CreateDbContextAsync(IUnitOfWork unitOfWork)
at Volo.Abp.Uow.EntityFrameworkCore.UnitOfWorkDbContextProvider`1.CreateDbContextAsync(IUnitOfWork unitOfWork, String connectionStringName, String connectionString)
at Volo.Abp.Uow.EntityFrameworkCore.UnitOfWorkDbContextProvider`1.GetDbContextAsync()
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`2.GetDbSetAsync()
at Volo.Abp.Domain.Repositories.EntityFrameworkCore.EfCoreRepository`2.GetListAsync(Expression`1 predicate, Boolean includeDetails, CancellationToken cancellationToken)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Volo.CmsKit.Pages.PageManager.GetHomePageAsync()
at Volo.CmsKit.Public.Pages.PagePublicAppService.FindDefaultHomePageAsync()
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Features.FeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.GlobalFeatures.GlobalFeatureInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Validation.ValidationInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Auditing.AuditingInterceptor.ProceedByLoggingAsync(IAbpMethodInvocation invocation, AbpAuditingOptions options, IAuditingHelper auditingHelper, IAuditLogScope auditLogScope)
at Volo.Abp.Auditing.AuditingInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at Castle.DynamicProxy.AsyncInterceptorBase.ProceedAsynchronous[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo)
at Volo.Abp.Castle.DynamicProxy.CastleAbpMethodInvocationAdapterWithReturnValue`1.ProceedAsync()
at Volo.Abp.Uow.UnitOfWorkInterceptor.InterceptAsync(IAbpMethodInvocation invocation)
at Volo.Abp.Castle.DynamicProxy.CastleAsyncAbpInterceptorAdapter`1.InterceptAsync[TResult](IInvocation invocation, IInvocationProceedInfo proceedInfo, Func`3 proceed)
at lambda_method1630(Closure, Object)
at Microsoft.AspNetCore.Mvc.Infrastructure.ActionMethodExecutor.AwaitableObjectResultExecutor.Execute(ActionContext actionContext, IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeActionMethodAsync>g__Awaited|12_0(ControllerActionInvoker invoker, ValueTask`1 actionResultValueTask)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeNextActionFilterAsync>g__Awaited|10_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Rethrow(ActionExecutedContextSealed context)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ControllerActionInvoker.<InvokeInnerFilterAsync>g__Awaited|13_0(ControllerActionInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
at Microsoft.AspNetCore.Mvc.Infrastructure.ResourceInvoker.<InvokeNextExceptionFilterAsync>g__Awaited|26_0(ResourceInvoker invoker, Task lastTask, State next, Scope scope, Object state, Boolean isCompleted)
[14:28:43 ERR] ---------- Exception Data ----------
ActivatorChain = Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext -> λ:Microsoft.EntityFrameworkCore.DbContextOptions`1[[Volo.CmsKit.EntityFrameworkCore.CmsKitDbContext, Volo.CmsKit.EntityFrameworkCore, Version=7.3.2.0, Culture=neutral, PublicKeyToken=null]]
I use the MicroService-pro template created a solution.
Add CmsKit-Pro Module to product service use abp suite.
Enabled the feature of CmsKit pro in Domain.Shared
GlobalFeatureManager.Instance.Modules.CmsKit(cmsKit =>
{
cmsKit.EnableAll();
});
GlobalFeatureManager.Instance.Modules.CmsKitPro(cmsKitPro =>
{
cmsKitPro.EnableAll();
});
I run the solution, throw exception.
ProductServiceDbContext.cs
[ConnectionStringName(ProductServiceDbProperties.ConnectionStringName)]
public class ProductServiceDbContext : AbpDbContext<ProductServiceDbContext>
{
public DbSet<Product> Products { get; set; }
public ProductServiceDbContext(DbContextOptions<ProductServiceDbContext> options)
: base(options)
{
}
protected override void OnModelCreating(ModelBuilder builder)
{
base.OnModelCreating(builder);
builder.ConfigureProductService();
builder.ConfigureCmsKitPro();
builder.ConfigureCmsKit();
}
}
ProductServiceDbContextFactory.cs
public class ProductServiceDbContextFactory : IDesignTimeDbContextFactory<ProductServiceDbContext>
{
private readonly string _connectionString;
/* This constructor is used when you use EF Core tooling (e.g. Update-Database) */
public ProductServiceDbContextFactory()
{
_connectionString = GetConnectionStringFromConfiguration();
}
public ProductServiceDbContext CreateDbContext(string[] args)
{
ProductServiceEfCoreEntityExtensionMappings.Configure();
var builder = new DbContextOptionsBuilder<ProductServiceDbContext>()
.UseMySql(_connectionString, MySqlServerVersion.LatestSupportedServerVersion, b =>
{
b.MigrationsHistoryTable("__ProductService_Migrations");
});
return new ProductServiceDbContext(builder.Options);
}
private static string GetConnectionStringFromConfiguration()
{
return BuildConfiguration()
.GetConnectionString(ProductServiceDbProperties.ConnectionStringName);
}
private static IConfigurationRoot BuildConfiguration()
{
var builder = new ConfigurationBuilder()
.SetBasePath(
Path.Combine(
Directory.GetCurrentDirectory(),
$"..{Path.DirectorySeparatorChar}XTC.BaaSo.ProductService.HttpApi.Host"
)
)
.AddJsonFile("appsettings.json", optional: false);
return builder.Build();
}
}
ProductServiceEntityFrameworkCoreModule.cs
[DependsOn(
typeof(AbpEntityFrameworkCoreMySQLModule),
typeof(AbpEntityFrameworkCoreModule),
typeof(ProductServiceDomainModule)
)]
[DependsOn(typeof(CmsKitProEntityFrameworkCoreModule))]
public class ProductServiceEntityFrameworkCoreModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
ProductServiceEfCoreEntityExtensionMappings.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
context.Services.AddAbpDbContext<ProductServiceDbContext>(options =>
{
/* Remove "includeAllEntities: true" to create
* default repositories only for aggregate roots */
options.AddDefaultRepositories(includeAllEntities: true);
options.AddRepository<Product, EfCoreProductRepository>();
});
context.Services.Configure<AbpDbContextOptions>(options => { });
Configure<AbpDbContextOptions>(options =>
{
options.Configure<ProductServiceDbContext>(c =>
{
c.UseMySQL(b =>
{
b.MigrationsHistoryTable("__ProductService_Migrations");
});
});
});
}
}
[15:48:51 ERR] An exception was thrown attempting to execute the error handler. System.InvalidOperationException: The view 'Components/MessagesToolbarItem//Pages/Chat/Components/MessagesToolbarItem/Default.cshtml' was not found. The following locations were searched: /Pages/Chat/Components/MessagesToolbarItem/Default.cshtml
Hi Anjali_Musmade,
I succeeded :)
Is like this?
$.ajax({
type: "POST", // Or "GET" depending on your scenario
url: "/ToDo1s?handler=Handle¶m1=hello¶m2=world", // Add URL of your handler method
success: function (data) {
console.log(data);
},
error: function (error) {
console.error(error);
}
});
public class IndexModel : ProdutServicePageModel
{
public string NameFilter { get; set; }
public async Task<IActionResult> OnPostHandleAsync(string param1, string param2)
{
Console.WriteLine($"{param1} {param2}");
return NoContent();
}
}
need OnPostHandlerAsync method
Hi Anjali_Musmade,
I tried your codes, but failed.
The url of ajax has parameter 'handler', Will it be handled automatically by the abp framework , or it needs to be handled manually? like this:
namespace XTC.BaaSo.ProductService.Web.Pages.Products;
public class IndexModel : ProductServicePageModel
{
public string NameFilter { get; set; }
public float? PriceFilterMin { get; set; }
public float? PriceFilterMax { get; set; }
// Parse Url?
public async Task<ActionResult> OnGet()
{
string? handler= null;
Microsoft.Extensions.Primitives.StringValues handlerParam;
if (Request.Query.TryGetValue("handler", out handlerParam))
{
if (handlerParam.Count > 0)
handler = handlerParam[0];
if(handler == "Handle")
Handle();
}
return Page();
}
//TODO invoke this method in javascript
public void Handle()
{
}
}
if needs to be handled manually, how to pass the parameters?
like this?
$.ajax({
type: "POST", // Or "GET" depending on your scenario
url: "/ToDo1s?handler=Handle¶m1=hello¶m2=world", // Add URL of your handler method
success: function (data) {
console.log(data);
},
error: function (error) {
console.error(error);
}
});
public class IndexModel : ProductServicePageModel
{
public string NameFilter { get; set; }
public float? PriceFilterMin { get; set; }
public float? PriceFilterMax { get; set; }
// Parse Url?
public async Task<ActionResult> OnGet()
{
string? handler= null;
string? param1 = null;
string? param2 = null;
Microsoft.Extensions.Primitives.StringValues strParam;
if (Request.Query.TryGetValue("param1", out strParam))
{
if (strParam.Count > 0)
handler = strParam[0];
}
if (Request.Query.TryGetValue("param1", out strParam))
{
if (strParam.Count > 0)
param1= strParam[0];
}
if (Request.Query.TryGetValue("param2", out strParam))
{
if (strParam.Count > 0)
param2 = strParam[0];
}
if(handler == "Handle")
Handle(param1, param2);
return Page();
}
//TODO invoke this method in javascript
public void Handle(string _param1, string _param2)
{
Console.WriteLine($"{_param1} {_param2}");
}
}