asp.net – 为什么我不能将if和eval结合起来?最新的选择是什么
在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.NET导出的word文件中添加页眉/页脚
- asp.net – 如何在IIS 7.5中配置应用程序池在停止时自动重新
- asp.net – 构建我的第一个ASP应用程序
- asp.net – 确定对IIS施加压力的因素
- asp.net – 如何禁用表单身份验证
- ASP.Net使用什么缓存算法?
- ASP.NET 4.0中的不同服务器和客户端缓存策略
- asp.net-web-api – SimpleInjector RegisterWebApiRequest
- asp.net-mvc-3 – Global.asax.cs在服务器上不可见
- asp.net-mvc-3 – 列模板kendo ui grid mvc动作链接
- asp.net-mvc – MVC 5 Bundle错误
- 一步步开发自己的博客 .NET版(1、基本显示)
- asp.net – 在资源文件中存储SQL查询是不好的做法
- 通过ASP.NET Web应用程序上载500MB文件
- asp.net – 当用户按下文本框中的返回时,我可以取
- asp.net – GridView RowUpdating无法获取新值
- asp.net-mvc-3 – ASP.NET MVC 3 – 验证问题
- asp.net-mvc – 我如何使用一个新的Phil的路由网
- asp.net – 仅为Web服务关闭customErrors
- asp.net-mvc – 有没有办法为MVC控制器中的每个动