ASP.NET中Eval()在非数据绑定控件上下文使用报错咨询
解决Eval()非数据绑定上下文调用的System.InvalidOperationException异常
问题原因
Eval()、Bind()这类数据绑定方法仅能在GridView、Repeater、DataList等数据绑定控件的模板内部使用,你在页面普通代码块<% ... %>中直接调用Eval(),脱离了数据绑定控件的上下文,因此触发该异常(错误位于代码第308行)。
可行解决方案
将逻辑移到数据绑定控件模板内
使用数据绑定表达式标记<%# %>替代普通代码块标记<% %>,确保Eval()处于控件绑定上下文:<asp:Repeater ID="ServiceRepeater" runat="server"> <ItemTemplate> <%# if (Eval("services_longtitle").ToString() == "Google Ads Services") { %> <!-- 此处添加需要显示的内容 --> <%# } %> </ItemTemplate> </asp:Repeater>直接从数据源对象取值
如果逻辑不在数据绑定控件内,跳过Eval(),直接访问后台传递到页面的数据源对象。比如后台已将数据赋值给protected级别的实体变量currentService:<% if (currentService.services_longtitle == "Google Ads Services") { %> <!-- 此处添加需要显示的内容 --> <% } %>后台缓存数据后前台调用
后台将需要判断的字段存为页面可访问的属性,前台直接调用该属性:
后台代码:protected string CurrentServiceTitle { get; set; } protected void Page_Load(object sender, EventArgs e) { // 示例:从数据源获取数据并赋值 var serviceData = GetServiceDataFromDB(); CurrentServiceTitle = serviceData.services_longtitle; }前台代码:
<% if (CurrentServiceTitle == "Google Ads Services") { %> <!-- 此处添加需要显示的内容 --> <% } %>
内容的提问来源于stack exchange,提问作者Enes Şahin
相关产品推荐
相关产品推荐

