【问题标题】:Define a Blazor Page using .razor.cs file only; no .razor file仅使用 .razor.cs 文件定义 Blazor 页面;没有 .razor 文件
【发布时间】:2021-06-20 13:06:16
【问题描述】:

我希望下面的“Test.razor.cs”文件(没有相应的“Test.razor”文件,因此没有“partial”)实际上可以作为一个页面工作。但我收到“抱歉,这个地址什么都没有”。转到“.../Test”时出错

using Microsoft.AspNetCore.Components;
using Microsoft.AspNetCore.Components.Rendering;
using NorthWind.UI.Shared;

namespace NorthWind.UI.Pages
{
    public class Test : ComponentBase
    {

        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenComponent(0, typeof(SurveyPrompt));
            builder.AddAttribute(1, "Title", $"Some Test");
            builder.CloseComponent();

            base.BuildRenderTree(builder);
        }
    }
}

有没有办法将它添加到 Blazor 也可以评估的页面中(除了添加前端 .razor 文件)?

【问题讨论】:

  • 我会问你为什么要这样做?你想达到什么目的?
  • 虽然您将文件命名为 Test.razor.cs,但实际上它只是 Test.cs - 不涉及剃须刀。正如@enet 所说,下面声明一个包含组件和 [at]page 指令的基本路由(页面)。请记住,[at]page 属性在 SPA 上必须是唯一的。类不是,你可以在一个项目或同一个组件中多次实例化它们,所以你不能用 [at]page 指令声明它们是有原因的。我们中许多使用 Blazor 已有一段时间的人都停止使用工作页面 - 这可能会产生很大的误导。
  • @BrettJB 我正在使用代码生成工具生成页面,然后覆盖要自定义的部分(github.com/TrackableEntities/… 不支持 .cs 或 .ts 以外的文件扩展名)

标签: blazor blazor-client-side


【解决方案1】:

答案是将Microsoft.AspNetCore.Components.RouteAttribute 添加到类中

    [Route("/Test")]
    public partial class Test : ComponentBase
    {

        protected override void BuildRenderTree(RenderTreeBuilder builder)
        {
            builder.OpenComponent(0, typeof(SurveyPrompt));
            builder.AddAttribute(1, "Title", $"Some Test");
            builder.CloseComponent();

            base.BuildRenderTree(builder);
        }
    }

【讨论】:

    猜你喜欢
    • 2019-09-18
    • 2020-04-05
    • 1970-01-01
    • 2021-08-28
    • 2020-05-23
    • 2015-07-09
    • 2010-10-20
    • 2021-11-10
    • 1970-01-01
    相关资源
    最近更新 更多