C# Eval值无法在Div标签中显示的问题排查求助
这种情况我做ASP.NET项目时也碰到过,结合你给出的ItemTemplate代码片段,大概率是这几个原因导致的,咱们一步步排查:
CSS样式强制隐藏了内容
你的div标签加了hide-description类,先去检查这个类的CSS规则,是不是设置了display: none或者visibility: hidden?如果是的话,哪怕Eval绑定到了值,页面也会把它藏起来。可以先临时删掉这个类,刷新页面看看内容会不会显示,再根据需求调整样式逻辑。Eval绑定的字段实际为空或绑定上下文异常
你说单独读取字符串没问题,但嵌入HTML后可能因为数据绑定的上下文变化?可以先做个调试测试,把绑定代码改成:<%# "DEBUG: " + (Eval("OFFENSE") ?? "NULL") %>看看页面上会不会输出
DEBUG: xxx的内容,如果只显示DEBUG: NULL,那说明你的数据源里OFFENSE字段确实是空的,或者绑定的数据源根本没给到这个控件。绑定语法的潜在问题
你当前的条件判断<%# Eval("OFFENSE").ToString() == "" ? "hidden" : "" %>有个风险:如果OFFENSE是null的话,调用ToString()会直接抛出空引用异常,导致整个模板渲染失败,后续的div内容自然也不会显示。建议改成更安全的写法:<%# string.IsNullOrEmpty(Eval("OFFENSE")?.ToString()) ? "hidden" : "" %>用空合并运算符
?.避免空引用,再用string.IsNullOrEmpty统一判断空或空字符串。数据控件未正确执行数据绑定
如果这个ItemTemplate是在GridView、Repeater这类数据控件里,一定要确认后台代码里有没有调用控件的DataBind()方法,并且数据源已经正确赋值给了控件。比如:myRepeater.DataSource = myDataSource; myRepeater.DataBind();要是没执行DataBind,控件根本不会渲染绑定的内容。
内容的提问来源于stack exchange,提问作者Connor Mackay

