Blazor中使用@符号与不使用的实际运行差异疑问
你的猜测完全正确,该差异本质是Blazor的Razor语法对不同上下文的解析规则不同导致的,具体规则如下:
- 组件参数属性上下文:写在HTML/组件标签的属性赋值位置的内容,默认会被Razor识别为C#表达式,不需要额外加
@前缀就能解析变量。你代码里的Value="task.Id"属于组件参数赋值场景,所以直接写task.Id就能正常读取变量值,加@的效果完全一致,此前提到的「是否用@仅为审美选择」的结论仅适用于该场景。 - 标签内容上下文:写在标签开闭标签之间的内容,默认会被识别为纯文本内容,如果你想要插入C#变量的计算结果,必须显式加
@前缀切换到C#表达式解析模式。你代码里直接写在<MudSelectItem>标签内部的task.Name没有加@,就会被直接当成字面量字符串输出,只有改成@task.Name才会渲染变量的实际值。
修正后的代码示例:
<MudSelect T="int" Label="Add to meeting:" Variant="Variant.Outlined" @bind-Value="SelectedTaskId"> @foreach (var task in TasksNotInMeeting) { <MudSelectItem Value="task.Id">@task.Name</MudSelectItem> } </MudSelect>
内容的提问来源于stack exchange,提问作者Henrique Pombo
相关产品推荐
相关产品推荐

