什么是@context,为什么它是红色的?

时间:2019-12-17 18:21:18

标签: blazor

我在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());
    }


}

2 个答案:

答案 0 :(得分:1)

您在使用Resharper吗?如果是这样,那很可能就是原因-Resharper的Blazor支持目前仍在进行中(尽管肯定在改善)。

有一个与--------------------------------------------------------------------------- TypeError Traceback (most recent call last) <ipython-input-313-39c697b1f1c5> in <module> ----> 1 ax = sns.barplot(x = 'Sex', y = 'Survived', data = train) c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in barplot(x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge, ax, **kwargs) 3148 estimator, ci, n_boot, units, seed, 3149 orient, color, palette, saturation, -> 3150 errcolor, errwidth, capsize, dodge) 3151 3152 if ax is None: c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in __init__(self, x, y, hue, data, order, hue_order, estimator, ci, n_boot, units, seed, orient, color, palette, saturation, errcolor, errwidth, capsize, dodge) 1615 order, hue_order, units) 1616 self.establish_colors(color, palette, saturation) -> 1617 self.estimate_statistic(estimator, ci, n_boot, seed) 1618 1619 self.dodge = dodge c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\categorical.py in estimate_statistic(self, estimator, ci, n_boot, seed) 1517 n_boot=n_boot, 1518 units=unit_data, -> 1519 seed=seed) 1520 confint.append(utils.ci(boots, ci)) 1521 c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\algorithms.py in bootstrap(*args, **kwargs) 83 for i in range(int(n_boot)): 84 resampler = integers(0, n, n) ---> 85 sample = [a.take(resampler, axis=0) for a in args] 86 boot_dist.append(f(*sample, **func_kwargs)) 87 return np.array(boot_dist) c:\users\userpc\appdata\local\programs\python\python37-32\lib\site-packages\seaborn\algorithms.py in <listcomp>(.0) 83 for i in range(int(n_boot)): 84 resampler = integers(0, n, n) ---> 85 sample = [a.take(resampler, axis=0) for a in args] 86 boot_dist.append(f(*sample, **func_kwargs)) 87 return np.array(boot_dist) TypeError: Cannot cast array data from dtype('int64') to dtype('int32') according to the rule 'safe' 问题有关的特定支持案例,标题为'Blazor template context parameters are marked as unresolved symbols'

我在下面的那篇文章的评论中提到了一个“丑陋的解决方法”,但是我建议您不要这样做,而是等待JetBrains解决根本问题:

import curses
from curses import KEY_RIGHT, KEY_LEFT, KEY_UP, KEY_DOWN
from random import randint


curses.initscr()
win = curses.newwin(20, 60, 0, 0)
win.keypad(1)
curses.noecho()
curses.curs_set(0)
win.border(0)
win.nodelay(1)

有关Blazor在Resharper中的总体进度,请检查'Blazor support'

答案 1 :(得分:-1)

在组件中定义RenderFragment属性时,实际上定义了一个委托,该委托封装了一个具有T类型单个参数的方法,例如:

RenderFragment<TItem> RowTemplate

当您像这样执行委托时:

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

您要为项目列表中的每个项目调用委托,为委托传递一个项目对象,例如Pet对象(请注意,委托的类型说明符在这里是通用的。 @context 是Blazor提供的内部变量,其中包含传递给委托的值,例如:

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

注意:RowTemplate元素的开头和结尾中的内容表示由RowTemplate RenderFragment委托生成的内容的片段...再次在生成内容时,将值传递给委托并使用它。例如,如果值是一个Pet对象,具有两个字段,则可以使用@ context.Name之类的表达式来访问字段的值。

请注意,有一种方法可以使用传递的对象的类型名称来代替@context,但这是另一回事了。

  

但是VS报告它无法解析符号'context'

这是警告,对吗?我没有检查您的代码,但是在我看来,使用的类型说明符是泛型类型,而VS无法解析基础类型。在我的示例中,类型说明符为TItem,但传递给RenderFragment<TItem> RowTemplate属性的项目列表的类型为Pet。

据我所记得,以前泛型类型存在问题,您必须将传递给基础组件的基础类型传递给模板组件...您必须这样编写代码:

模板化组件的用法:

如您所见,我们将一个名为“ pets”的Pet对象列表分配给Items属性,但是我们还必须指定在列表中传递的对象的类型(TItem =“ Pet”)。据我所知,这个问题已经解决了,也许BlazoredTypeahead的代码是写在前面的?