ASP.NET(C#)中结合Eval函数使用IF ELSEIF ELSE条件的问题求助
ASP.NET C# 结合Eval实现多条件显示图片按钮
问题描述
我在ASP.NET C#项目中,需要在GridView的TemplateField里根据绑定字段dOR_4的值,显示不同的ImageButton:
- 当
dOR_4为R时,显示红色子弹图片 - 当
dOR_4为G时,显示金色子弹图片 - 当
dOR_4为V时,显示绿色子弹图片
最初尝试的代码如下,但报错:"Databinding methods such as Eval(), XPath(), and Bind() can only be used in the context of a databound control."
<asp:TemplateField HeaderText="text" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new"> <ItemTemplate> <% if (Eval("dOR_4").ToString().Equals("R")) { %> <asp:ImageButton ID="btn" ImageUrl="/Img/bullett/redbul.gif" runat="server" /> <% } else if (Eval("dOR_4").ToString().Equals("G")) { %> <asp:ImageButton ID="btn" ImageUrl="/Img/bullett/goldbul.gif" runat="server" /> <% } else if (Eval("dOR_4").ToString().Equals("V")) { %> <asp:ImageButton ID="btn" ImageUrl="/Img/bullett/forestbul.gif" runat="server" /> <% } %> </ItemTemplate> </asp:TemplateField>
之后改用三元运算符尝试,但无法显示goldbul.gif:
<asp:TemplateField HeaderText="text" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new"> <ItemTemplate> <asp:ImageButton ID="btn" ImageUrl='<%# Eval("dOR_4").ToString().Equals("R") ? "/Img/bullett/redbul.gif" : Eval("dOR_4).ToString().Equals("G") ? "/Img/bullett/goldbul.gif" : "/Img/bullett/forestbul.gif" %>' runat="server" /> </ItemTemplate> </asp:TemplateField>
解决方案
方案1:修复三元运算符的语法问题
你之前的三元表达式里,Eval("dOR_4)少了闭合的双引号,导致语法错误,修正后即可正常运行:
<asp:TemplateField HeaderText="text" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new"> <ItemTemplate> <asp:ImageButton ID="btn" ImageUrl='<%# Eval("dOR_4").ToString().Equals("R") ? "/Img/bullett/redbul.gif" : Eval("dOR_4").ToString().Equals("G") ? "/Img/bullett/goldbul.gif" : "/Img/bullett/forestbul.gif" %>' runat="server" /> </ItemTemplate> </asp:TemplateField>
方案2:使用后台绑定方法(更易维护)
如果条件较多,推荐在后台代码中写一个绑定方法,逻辑更清晰,也方便后续修改:
后台代码(.aspx.cs)
public string GetBulletImageUrl(object dORValue) { string value = dORValue?.ToString() ?? string.Empty; return value switch { "R" => "/Img/bullett/redbul.gif", "G" => "/Img/bullett/goldbul.gif", "V" => "/Img/bullett/forestbul.gif", _ => "/Img/bullett/forestbul.gif" // 默认值 }; }
前台代码(.aspx)
<asp:TemplateField HeaderText="text" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new"> <ItemTemplate> <asp:ImageButton ID="btn" ImageUrl='<%# GetBulletImageUrl(Eval("dOR_4")) %>' runat="server" /> </ItemTemplate> </asp:TemplateField>
方案3:使用绑定代码块(<%# %>)替代普通代码块(<% %>)
最初的错误是因为使用了<% %>普通代码块,而Eval只能在绑定代码块<%# %>中使用,修改后可以保留多分支的if结构:
<asp:TemplateField HeaderText="text" ItemStyle-HorizontalAlign="Center" ItemStyle-CssClass="ddl_Class_new"> <ItemTemplate> <%# Eval("dOR_4").ToString().Equals("R") ? "<asp:ImageButton ID='btn' ImageUrl='/Img/bullett/redbul.gif' runat='server' />" : Eval("dOR_4").ToString().Equals("G") ? "<asp:ImageButton ID='btn' ImageUrl='/Img/bullett/goldbul.gif' runat='server' />" : "<asp:ImageButton ID='btn' ImageUrl='/Img/bullett/forestbul.gif' runat='server' />" %> </ItemTemplate> </asp:TemplateField>
注意:这种方式需要将控件代码作为字符串返回,ASP.NET会解析并渲染对应的控件,适合简单场景。
内容的提问来源于stack exchange,提问作者George A. Custer
相关产品推荐
相关产品推荐

