如何在Telerik Grid中将布尔值替换为Active/Disable状态文本?
解决Telerik Grid中布尔值转文本显示的问题
错误原因
你尝试在GridColumn的Field属性中直接写入三元表达式是错误的——Field仅支持绑定到模型的具体属性名称,无法解析复杂表达式,这才触发了"The expression does not have a name"错误。
解决方案
提供两种可行的实现方式:
方法1:使用GridColumn的Template(推荐,无需修改模型)
直接在GridColumn内部通过Template渲染自定义内容,逻辑和你之前在HTML中使用的三元表达式一致:
<GridColumn Title="Status"> <Template> @((context as MiddlewareModel).Active ? "Active" : "Disable") </Template> </GridColumn>
这种方式不需要修改模型,直接在视图层处理显示逻辑,适合快速实现需求。
方法2:在模型中添加计算属性(支持排序/过滤)
如果需要对Status列进行排序或过滤,建议在MiddlewareModel中新增一个计算属性:
public class MiddlewareModel { // 原有属性 public int MiddlewareId { get; set; } public string Description { get; set; } public bool Active { get; set; } // 新增计算属性 public string StatusText => Active ? "Active" : "Disable"; }
之后在GridColumn中直接绑定该属性:
<GridColumn Field="@nameof(MiddlewareModel.StatusText)" Title="Status"></GridColumn>
修改后的完整Grid代码片段
替换原有的Status列后,完整的Grid部分代码如下:
<TelerikGrid Data="middlewareHeader" Sortable="true" Pageable="true" FilterMode="GridFilterMode.FilterMenu"> <GridToolBar> <GridSearchBox Placeholder="@Placeholder" Width="@(SearchBoxWidth >= 100 ? SearchBoxWidth +"px" : "100px")" DebounceDelay="@DebounceDelay"> </GridSearchBox> </GridToolBar> <GridColumns> <GridColumn Field="@nameof(MiddlewareModel.MiddlewareId)" Title="Middleware"></GridColumn> <GridColumn Field="@nameof(MiddlewareModel.Description)" Title="Description"></GridColumn> <!-- 修改后的Status列 --> <GridColumn Title="Status"> <Template> @((context as MiddlewareModel).Active ? "Active" : "Disable") </Template> </GridColumn> <GridColumn Field="@nameof(MiddlewareModel.MiddlewareId)" Title="Navigation"> <Template> <TelerikButton @onclick="@(() => Navigation.NavigateTo($"/Environments/{environmentId}/Middlewares/{(context as MiddlewareModel).MiddlewareId}"))">More Information</TelerikButton> </Template> </GridColumn> </GridColumns> </TelerikGrid>
额外提示
你的OnInitializedAsync方法中API地址存在字符串插值错误,需修正为:
middlewareHeader = await Http.GetFromJsonAsync<MiddlewareModel[]?>($"https://localhost:57031/api/Environments/{environmentId}/Middlewares");
内容的提问来源于stack exchange,提问作者Alberto Smith
相关产品推荐
相关产品推荐

