Nonfactors MVC Grid三元运算符失效问题排查求助
解决Nonfactors MVC Grid中图标显示异常的问题
嘿,我一眼就发现你代码里的问题啦!
你当前的写法中,Formatted("{0}" == "folder" ? "<span class=\"glyphicon glyphicon-folder-open\"></span>" : "<span class=\"glyphicon glyphicon-file\"></span>") 存在一个关键错误:这里的"{0}"是一个字面量字符串,并不是模型中Type属性的占位符。也就是说,你其实在比较固定字符串"{0}"和"folder",这个比较永远会返回false,所以三元运算符始终会取第二个选项(文件图标);如果调换两个选项的位置,就会因为false而取第一个选项(文件夹图标),这就是为什么无论数据如何,显示的图标都不会变化。
正确的解决方案
Nonfactors MVC Grid提供了Rendered方法,它允许你直接针对每一行的模型对象生成自定义HTML内容,这比Formatted更适合这种动态判断的场景。修正后的代码如下:
@(Html.Grid(items) .Build(columns => { columns.Add(model => model.Type) .Rendered(model => model.Type == "folder" ? "<span class=\"glyphicon glyphicon-folder-open\"></span>" : "<span class=\"glyphicon glyphicon-file\"></span>") .Encoded(false); columns.Add(model => model.Id).Titled("Id"); columns.Add(model => model.Name).Titled("Name"); columns.Add(model => model.Size).Titled("Size"); }) .Empty("No data found") .Sortable() )
代码说明
Rendered(model => ...):这个方法接收一个委托,每一行的模型对象会被传入这个委托,你可以直接访问model.Type来做判断,动态生成对应的图标HTML。.Encoded(false):必须保留这个设置,否则Grid会把你的HTML代码转义成纯文本,图标就无法正常显示了。
这样修改后,Grid就会根据每一行数据的Type属性值,正确显示文件夹或文件图标啦!
内容的提问来源于stack exchange,提问作者Bassie
相关产品推荐
相关产品推荐

