如何禁用Blazor服务器端预渲染?

时间:2019-04-19 15:28:54

标签: blazor blazor-server-side asp.net-core-3.0

要在asp.net核心预览版3上禁用服务器端预渲染,您只需注释<input type="text" class="form-control" placeholder="Enter value" id="txtvalueRef" name="valueRef" #valueRef="ngModel" pattern="[0-9]*"> <div [hidden]="valueRef.valid || valueRef.pristine" class="alert alert-danger"> <div [hidden]="!valueRef.hasError('pattern')">Items should be only numbers</div> </div>

自从asp.net核心预览版4开始,当您注释此行时,该页面将不呈现,并且在主要组件@(await Html.RenderComponentAsync<MyApp>())上,标记@page "/"保持空白。

那么,如何禁用服务器端预渲染?

2 个答案:

答案 0 :(得分:2)

最后在github中找到了cores-system的解决方案 来源:https://github.com/aspnet/AspNetCore/issues/9584#issuecomment-485257261

app.UseEndpoints(endpoints =>
{
   endpoints.MapBlazorHub().AddComponent<App>(selector: "app");
   endpoints.MapFallbackToFile("index.html"); // or - endpoints.MapFallbackToPage("/_Host");
});

希望这行得通...

答案 1 :(得分:0)

也许您应该从中删除<Reference Include="Microsoft.AspNetCore.Mvc.Components.Prerendering" /> .csproj文件。

希望这对您有帮助...

此:@(await Html.RenderComponentAsync<MyApp>()) 代码段是“将有状态的交互式组件添加到 Razor页面或视图的一种方法。当页面或视图呈现时,组件将随其一起呈现。”

这绝对不是您建议的启用服务器端预渲染的配置。

服务器端预渲染是在AddServerSideBlazor方法中配置的;更具体地说,通过此方法调用:

// We explicitly take over the prerendering and components services here.
            // We can't have two separate component implementations coexisting at the
            // same time, so when you register components (Circuits) it takes over
            // all the abstractions.
            services.AddScoped<IComponentPrerenderer, CircuitPrerenderer>(); 

来源:https://github.com/aspnet/AspNetCore/blob/b9e600a45c5a56f869f12dda6242ef069bd2f9dc/src/Components/Server/src/DependencyInjection/ComponentServiceCollectionExtensions.cs

我猜想现在不可能禁用服务器端预渲染。它被强加给我们。但是,您应该进行研究,并发现真相。也许我写的都是胡说八道...