簡體   English   中英

什么是@context,為什么它是紅色的?

[英]What is @context and why is it red?

我在 blazor 服務器端應用程序中使用 BlazoredTypeahead 組件,我想知道 @context 關鍵字的來源。

以下代碼運行良好,但 VS 報告它無法解析符號“上下文”。 當然,我很好奇它為什么起作用以及上下文來自哪里。

@inject IEquipmentService EquipmentService
@inject AppDataService AppDataService
<h3>ModelSelect</h3>

<BlazoredTypeahead SearchMethod="SearchModels"
                   @bind-Value="equipModel">
    <SelectedTemplate>
        @context.model
    </SelectedTemplate>
    <ResultTemplate>
        @context.model (@context.model_desc)
    </ResultTemplate>
</BlazoredTypeahead>

@if (equipModel != null)
{
    <p>Selected model is: @equipModel.model</p>
}

@code {


    private EquipModel equipModel;


    private async Task<IEnumerable<EquipModel>> SearchModels(string searchText)
    {
        var result = await EquipmentService.SearchModels(AppDataService.CurrentContact, searchText);

        return await Task.FromResult(result.ToList());
    }


}

當您在組件中定義 RenderFragment 屬性時,您實際上定義了一個委托,該委托封裝了具有單個 T 類型參數的方法,例如:

RenderFragment<TItem> RowTemplate

當您像這樣執行委托時:

@foreach (var item in Items)
 {
     <tr>@RowTemplate(item)</tr>
 }

你要求在項目列表的每個項目的委托,通過該委托的項目對象,說寵物的對象(注意,委托的類型說明符這里是通用的。@context是Blazor提供的內部變量包含傳遞給委托的值,例如:

<RowTemplate>
  <td>@context.ID</td>
  <td>@context.Name</td>
</RowTemplate>  

注意:RowTemplate 元素的開頭和結尾中的內容表示由 RowTemplate RenderFragment 委托生成的內容片段……再次生成內容時,您將獲得傳遞給委托的值並使用它。 如果值是一個 Pet 對象,例如,有兩個字段,您可以使用像@context.Name 這樣的表達式來訪問字段的值。

請注意,有一種方法可以使用傳遞的對象的類型名稱而不是使用 @context,但這是另一回事。

但 VS 報告說它無法解析符號“上下文”

這是警告,對吧? 我沒有檢查您的代碼,但在我看來,使用的類型說明符是泛型類型,VS 無法解析底層類型。 在我的示例中,類型說明符是 TItem,但傳遞給RenderFragment<TItem> RowTemplate屬性的項目列表的類型是 Pet 類型。

據我所知,以前泛型類型存在問題,您必須將傳遞給模板化組件的基礎類型傳遞給...您必須像這樣編寫代碼:

模板化組件的使用:

 <TableTemplate TItem="Pet" Items="pets">

 </TableTemplate>

如您所見,我們將名為"pets"的 Pet 對象列表分配給 Items 屬性,但我們還必須指定在列表中傳遞的對象的類型( TItem="Pet" )。 據我所知這個問題已經解決了,可能是之前寫的BlazoredTypeahead的代碼?

您在使用 Resharper 嗎? 如果是這樣,這很可能是原因——Resharper 的 Blazor 支持目前仍在進行中(盡管肯定在改進)。

有一個與@context問題相關的特定支持案例,標題為“Blazor 模板上下文參數被標記為未解析的符號”

我在下面包含的那篇文章的評論中提到了“丑陋的解決方法”,但我建議不要這樣做並等待 JetBrains 解決潛在問題:

@code {
    private Pet context;
}
...
<td>@context.PetId</td>
...

對於 Resharper 中的一般 Blazor 進度,請檢查“Blazor 支持”

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM