You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Blazor组件编译报错CS0116/CS0115:命名空间无法直接包含成员

解决Blazor组件CS0116和CS0115编译错误

你的问题根源在于Razor文件的HTML部分存在语法错误,导致编译器无法正确识别@code块,进而把代码块里的内容当成了命名空间下的顶级代码,触发了这些奇怪的编译错误。

具体原因

在Blazor中,当你需要在HTML属性里引用C#表达式(比如静态类成员LowerParagraph.Sizes.XS)时,必须在表达式前加上@前缀。你当前的代码里直接把这些C#成员作为属性值,没有加@,这会让Razor解析器把它们当成普通字符串——不仅会导致属性绑定失败,还会破坏整个文件的结构解析,使得后续的@code块无法被识别为组件类的一部分,最终被当成命名空间下的无效顶级代码。

修复步骤

你只需要修改所有使用C#静态成员的HTML属性,给它们加上@前缀即可:

  • 将Size="LowerParagraph.Sizes.XS"改为Size="@LowerParagraph.Sizes.XS"
  • 将Variant="LowerParagraph.Variants.Italic"改为Variant="@LowerParagraph.Variants.Italic"

修复后的完整组件代码

@using Lower.Lending.Interface.DataTypes
@using Lower.Lending.Interface.DTOs
@using Lower.Shared.Collections

<div class="task-status-dropdown">
    <LowerDropdown Label="Change Task Status">
        <ButtonContent>
            <LowerParagraph Size="@LowerParagraph.Sizes.XS">@TaskDto.Status.GetEnumMemberValue()</LowerParagraph>
            @if (TaskDto.Note is not null)
            {
                <LowerParagraph Variant="@LowerParagraph.Variants.Italic"
                                Size="@LowerParagraph.Sizes.XS">@TaskDto.Note</LowerParagraph>
            }
        </ButtonContent>
        <DropdownContent>
            <LowerDropdownGroup>
                <LowerDropdownLabel>
                    STATUS
                </LowerDropdownLabel>
                @if (TaskDto.Status is not ConditionTaskStatus.Completed)
                {
                    <LowerDropdownItemButton Label="Complete"
                                             OnClick="@(() => OnStatusChange(ConditionTaskStatus.Completed))">
                        Complete
                    </LowerDropdownItemButton>
                }
                @else
                {
                    <LowerDropdownItemButton Label="Incomplete"
                                             OnClick="@(() => OnStatusChange(ConditionTaskStatus.Incomplete))">
                        Incomplete
                    </LowerDropdownItemButton>
                }
            </LowerDropdownGroup>
        </DropdownContent>
    </LowerDropdown>
</div>

@code
{

    [Parameter, EditorRequired]
    public ConditionTaskDto TaskDto { get; set; } = null!;

    [Parameter, EditorRequired]
    public Action<ConditionTaskStatus> OnStatusChange { get; set; } = null!;

    protected override void OnInitialized()
    {
        base.OnInitialized();

        if (TaskDto.Status is ConditionTaskStatus.Deleted)
        {
            throw new InvalidOperationException("A task's status cannot be changed once it has been deleted");
        }
    }

}

额外检查建议

如果修复后仍有问题,可以再确认以下几点:

  • 所有自定义组件的标签都已正确闭合(比如<LowerDropdown>、<ButtonContent>等)
  • 没有其他未闭合的HTML标签或引号错误
  • 文件确实是以.razor为扩展名保存的

这类小语法错误很容易被忽略,但会导致Razor解析器出现异常的编译报错,所以仔细检查HTML部分的语法是解决这类问题的关键。

内容的提问来源于stack exchange,提问作者Mike Harrison

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.04 10:22:54