如何获取TagHelper中属性的赋值文本字符串?
获取TagHelper属性的原始赋值字符串文本
默认情况下,TagHelper的属性会通过模型绑定转换为对应的类型(比如你的DataItems会被转换成IEnumerable<object>对象),因此无法直接从DataItems获取视图中写入的原始字符串值。要拿到Items="listDataBC"里的listDataBC字符串,需要从TagHelperContext的属性集合中读取原始属性值。
基础解决方案代码示例
修改你的ProcessAsync方法如下:
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { // 尝试获取名为"Items"的属性 if (context.AllAttributes.TryGetAttribute("Items", out var itemsAttribute)) { // 获取视图中写入的原始字符串值 string stringText = itemsAttribute.Value.ToString(); // 此时stringText的值就是"listDataBC" } // 保留原有逻辑... }
兼容绑定表达式的扩展处理
如果视图中使用的是绑定表达式(比如<customcontrol Items="@Model.ListData"/>),itemsAttribute.Value会是ModelExpression类型,这时候可以通过以下方式获取表达式名称:
public async override Task ProcessAsync(TagHelperContext context, TagHelperOutput output) { if (context.AllAttributes.TryGetAttribute("Items", out var itemsAttribute)) { string stringText; if (itemsAttribute.Value is string rawString) { stringText = rawString; } else if (itemsAttribute.Value is Microsoft.AspNetCore.Mvc.ViewFeatures.ModelExpression expression) { // 获取绑定表达式的名称(比如"ListData") stringText = expression.Name; } else { // 其他类型回退到ToString() stringText = itemsAttribute.Value.ToString(); } } // 保留原有逻辑... }
原理说明
TagHelperContext.AllAttributes集合存储了视图中为当前TagHelper设置的所有属性及其原始值,不受模型绑定的影响。通过TryGetAttribute方法定位到目标属性后,直接读取其Value即可获取视图中写入的原始文本内容。
内容的提问来源于stack exchange,提问作者Topik
相关产品推荐
相关产品推荐

