【问题标题】:Blazor server-side, razor page: Object reference not set to an instance of an objectBlazor 服务器端,剃刀页面:对象引用未设置为对象的实例
【发布时间】:2021-01-05 23:04:16
【问题描述】:

我正在使用 .NET 5 版本 5.0.100-rc.1.20452.10 ,ASP.NET Core Blazor 服务器端。

我模仿这个例子https://github.com/DevExpress-Examples/blazor-server-dxdatagrid-export/blob/19.2.2%2B/CS/DxDataGridExportingWithReports/Pages/Index.razor#L22

我的错误

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=acc133blazor
  StackTrace:
   at acc133blazor.Pages.DeclaredData.Account.AccountsPage.<OnInitializedAsync>d__10.MoveNext() in D:\acc133blazor\acc133blazor\Pages\DeclaredData\Account\AccountsPage.razor:line 144

@foreach (Tuple<string, string> urlInfo in ExportUrlInfo)
{
    <a href="@urlInfo.Item1" download target="_blank">@urlInfo.Item2</a>
}

    <br />
    <br />
}

@code {
    private readonly ObservableCollection<Tuple<string, string>> exportUrlInfo = new ObservableCollection<Tuple<string, string>>();

    protected Task<LoadResult> LoadOrderData(DataSourceLoadOptionsBase options, CancellationToken cancellationToken) {
        string baseUri = NavigationManager.BaseUri.ToString();
        exportUrlInfo.Clear();
        exportUrlInfo.Add(Tuple.Create(options.ConvertToGetRequestUri(baseUri + "exportPdf"), "Export PDF"));
        exportUrlInfo.Add(Tuple.Create(options.ConvertToGetRequestUri(baseUri + "exportXlsx"), "Export XLSX"));
        exportUrlInfo.Add(Tuple.Create(options.ConvertToGetRequestUri(baseUri + "exportDocx"), "Export DOCX"));
        return Task.FromResult(DataSourceLoader.Load(AccountList, options));
    }

    public ObservableCollection<Tuple<string, string>> ExportUrlInfo { get; set; }

//...
    protected override async Task OnInitializedAsync()
    {
        AccountList = await Controller.GetAccountAsync();
        ListOfAccountTypes = new List<ComboBoxItem>()
        {
            new ComboBoxItem(0,"Dư Nợ"),
            new ComboBoxItem(1,"Dư Có"),
            new ComboBoxItem(2,"Lưỡng tính")
        };
        ExportUrlInfo.CollectionChanged += (s, e) =>
        {
            InvokeAsync(StateHasChanged);
        };
    }

如何解决错误?

【问题讨论】:

    标签: c# asp.net-core razor blazor blazor-server-side


    【解决方案1】:

    问题出在ExportUrlInfo.CollectionChangedExportUrlInfo 尚未初始化。

    引用类型需要得到一个初始值:

    下面的声明并不意味着它会有一个值

    public ObservableCollection<Tuple<string, string>> ExportUrlInfo { get; set; }
    

    你有两个选择:

    1. 更改属性以使用支持变量:
    public ObservableCollection<Tuple<string, string>> ExportUrlInfo { get { return exportUrlInfo; } set { exportUrlInfo = value; } }
    
    1. 更改对私有成员的引用
            this.exportUrlInfo.CollectionChanged += (s, e) =>
            {
                InvokeAsync(StateHasChanged);
            };
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-01
      • 2021-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      • 2016-04-21
      • 1970-01-01
      相关资源
      最近更新 更多