加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

asp.net – 为什么我不能将if和eval结合起来?最新的选择是什么

发布时间:2020-12-16 06:53:57 所属栏目:asp.Net 来源:网络整理
导读:在Asp Net数据绑定控件中,可以使用漂亮的Eval()语法: div%# Eval("MyProp") %/div 但是它不可能与条件语句结合使用吗?: % if (Eval("MyProp")!="") { %div%# Eval("MyProp") %/div%} % 有这个选择会很高兴. 所以 – 我的选择是将部分标记放在CodeBehind中
在Asp Net数据绑定控件中,可以使用漂亮的Eval()语法:

<div><%# Eval("MyProp") %></div>

但是它不可能与条件语句结合使用吗?:

<% if (Eval("MyProp")!="") { %>
<div><%# Eval("MyProp") %></div>
<%} %>

有这个选择会很高兴.

所以 – 我的选择是将部分标记放在CodeBehind中.我真的很喜欢把它放在那里.还有其他可能吗?

解决方法

<div runat="server" visible='<%# !String.IsNullOrEmpty(Eval("MyProp") as string) %>'>
    <%# Eval("MyProp") %>
</div>

编辑2010/9/30

现在我有一点时间,我觉得我应该扩展我的答案.特别是考虑到问题是重复已经有a better answer比我原来的.所以我将解决你问题的第一部分:

你为什么不把if和eval结合起来?原因是<%...%>代码块在页面生命周期的呈现阶段执行. ASP.NET将您的代码(本例中为if语句)放入函数中,然后将该函数作为委托传递给SetRenderMethodDelegate.问题是Eval在Page.GetDataItem返回的对象上计算表达式“MyProp”.Page.GetDataItem是如果在调用堆栈中早先调用了DataBind,那么只会返回一个值的魔法.到渲染阶段到来时,所有数据绑定都已完成.因此,当您调用Eval(隐式调用Page.GetDataItem)时,会抛出以下错误:“数据绑定方法[…]只能在数据绑定控件的上下文中使用.”

所以<%...%>代码块不起作用,但<%#...%>呢?代码块,a.k.a.data-binding expressions?数据绑定表达式确实在页面生命周期的所需部分中运行 – 在对DataBind的调用中.但是,这里的操作词是表达. if语句不是表达式.你抛出的任何东西<%#...%>将由编译器作为表达式进行评估.如果你在那里放一个语句,编译器将抛出一个错误.

因此,我们得出了在控件的Visible属性上的数据绑定表达式中调用Eval的习语. Eval与数据绑定表达式兼容;编写表达式足以分配属性的值;并且Visible属性能够实现类似于使用内联if语句的效果.
最后提示:如果您最终遇到没有任何现有控件来自然添加可见条件的情况,您可以始终使用<asp:PlaceHolder>,这是一个不向标记添加任何标记的控件.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读