我有一个相当标准的Razor项目,我最近在这个项目中引入了Blazor组件。我添加了_Host.cshtml、App.razor和其他要求,以使Blazor正常工作。当我到达一个完全属于Blazor组件的端点时,Blazor组件工作得很好。但是,我希望使用以下内容将Blazor组件嵌入到我当前的.cshtml页面中
@(await Html.RenderComponentAsync<EditorComponent>(RenderMode.Server, new { Id = Model.Id}))在我的cshtml页面上。这个语法可以很好地呈现组件,但是在我的OnAfterRenderAsync组件中,它不运行任何Blazor生命周期方法(Blazor生命周期方法),甚至不运行类似于返回任务的按钮。
我已经包括了
<script src="~/_framework/blazor.server.js"></script>在布局页面中元素的末尾。我是不是漏掉了什么东西才能让这件事起作用?
发布于 2022-03-17 23:35:09
我认为您可能需要使用component标记助手。
<component type="typeof(EditorComponent)" render-mode="Server" param-Id=@Model.Id/>
发布于 2022-03-18 16:28:02
由于您没有提供太多的代码,所以我构建了这段代码来尝试重现您的问题。
我不能:它能像我所期望的那样起作用。因此,除非上述任何一个答案解决了您的问题,否则您将需要提供更多的代码。
起始点Blazor服务器模板。
新剃须刀页面- _Test.cshtml
@page "/Test"
@namespace BlazorApp8.Pages
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
@{
Layout = "_Layout";
}
<h1>Counter in a Page</h1>
<div class="m-2 p-2">
@(await Html.RenderComponentAsync<Counter>(RenderMode.Server, new { Starter = 6}))
</div>更新Counter.razor以接受参数。
[Parameter] public int Starter { get; set; } = 0;
protected override Task OnInitializedAsync()
{
currentCount = this.Starter;
return base.OnInitializedAsync();
}运行并导航到/Test。
我得到计数器页面,OnInitialized将初始计数设置为6,单击按钮会增加计数器。
发布于 2022-03-18 23:15:08
将_Layout.cshtml中的blazor部分替换为=>
<head>
...
<base href="~/"/>
</head>
...
<script src="_framework/blazor.server.js" autostart="false" ></script>
<script>
Blazor.start({
configureSignalR: function(builder) {
builder.withUrl("_blazor");
}
});
</script>
...确保检查您的web控制台输出。很可能会抛出一个错误。这是从我制作的每个应用程序的每个区域的每一个布局中提取出来的。我享受过模板化的微ui体验。Dotnet真的使通过模板来扩展您自己的设计变得轻而易举。
https://stackoverflow.com/questions/71519303
复制相似问题