使用泛型 Blazor 视图时,出现 VS 在错误列表中显示错误的问题

3

错误消息: 发现了名称为'TFilterViewModel'的标记元素,这与预期不符。如果这是一个组件,请为其命名空间添加@using指令。

这个错误消息不应该在错误列表中显示,因为泛型类型TFilterViewModel有一个ComponentBase的限制。

此外,没有构建错误。构建始终成功。但是VS在错误列表和下划线中显示了一个错误:

<TFilterViewModel ViewModel="@ViewModel" />

只是一个显示错误吗?

ViewModelFilter.razor

@using Common.Server.UI.ViewModels.Bases

@typeparam TModel
@typeparam TFilterViewModel

<h5><input type="checkbox" @bind="@FilterViewModel!.ShowFilter" disabled="@Disabled" />@Res.LabelFilter</h5>
@if (FilterViewModel.ShowFilter)
{
    <TFilterViewModel ViewModel="@ViewModel" /> // Error: Found markup element with unexpected name 'TFilterViewModel' (...)
}

@code
{
#nullable disable
    [Parameter] public IFilteredListViewModel<TFilterViewModel> FilterViewModel { get; set; }
    [Parameter] public TModel ViewModel { get; set; }
    [Parameter] public bool Disabled { get; set; }
#nullable restore
}

ViewModelFilter.razor.cs

using Microsoft.AspNetCore.Components;

namespace Common.Server.UI.Controls
{
    public interface IViewModelComponentBase<TModel>
    {
        public TModel ViewModel { get; set; }
    }

    public partial class ViewModelFilter<TModel, TFilterViewModel> : ComponentBase
        where TFilterViewModel : ComponentBase, IViewModelComponentBase<TModel>
    { }
}


当我开发Blazor应用程序时,这些事情经常发生,我的同事也有同样的经历。有时候进行一次干净的构建就足够了,其他时候我需要完全关闭VS并重新启动它,然后这些奇怪的消息才会消失。很抱歉我没有更好的解决方案,但我相信随着VS的更新,这个问题最终会得到解决。 - Dennis VW
关闭VS可以解决这个问题...但这很烦人。我总是使用最新的VS。 - CleanCoder
1个回答

0

我的团队遇到过这种情况几次。

对我们有效的一些方法是:

  1. 删除 obj 和 bin 文件夹(临时解决方案;不用担心,在下次构建解决方案时它们会重新生成)。
  2. 重启 VS(临时解决方案)。
  3. 升级到最新的 VS2022(我们在 VS2022-17.2.3 上没有出现过这个问题;这个选项对我的团队非常有帮助)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接