题
我想将按钮的启用状态设置为值的否定。
所以给出这段代码:
<asp:CheckBox ID="DefaultChecked"
Checked='<%# Bind("IsDefaultMessage") %>'
Enabled="false"
runat="server" />
<asp:LinkButton ID="MakeDefaultButton"
runat="server"
CommandName="MakeDefault'
CommandArgument='<%# Bind("ResidentialInfoID") %>'
Text="Make Default" />
我怎样才能制作LinkButton Enabled
属性 false
如果 IsDefaultMessage == true
?
解决方案
使用 Eval 而不是 Bind。Bind 用于双向绑定,即适用于您需要能够将数据保存回数据源的情况。
当您使用Bind时,编译后的页面实际上会生成使用Eval设置值的代码,以及一些读取值进行保存的代码。由于 Bind 已替换为生成的代码,因此您不能对 Bind 使用任何额外的逻辑。
<asp:CheckBox ID="DefaultChecked" Checked='<%# !(bool)Eval("IsDefaultMessage") %>' Enabled="false" runat="server" />
<asp:LinkButton ID="MakeDefaultButton" runat="server" CommandName="MakeDefault' CommandArgument='<%#Bind("ResidentialInfoID") %>' Text="Make Default"/>
其他提示
如果你可以使用Eval,它只是一个方法 Control
班级。它的唯一特殊之处在于它需要位于数据绑定块的上下文中 <%# ... %>
. 。除此之外,您基本上可以像普通块一样对待该块 <%= %>
表达块:
<%# !(bool)Eval("IsDefaultMessage") %>
如果您仍想绑定它(Eval 不是往返),那么您需要在数据绑定期间来回否定它。不过,如果您可以重新编写控件的话,您可能不需要这样做。例如,如果有一个复选框,不要将其标记为“不是默认消息”给用户并来回否定它,而是将其标记为“是默认消息”。人为的例子,但你明白了。
我从未使用过 Bind,但我的理解是它类似于 Databinder.Eval。无论哪种方式,这两种方法都会返回对象,因此您需要在评估它之前将其转换为布尔值。
<%# !Convert.ToBoolean(Bind("IsDefaultMessage") %>
编辑:看起来这是无法完成的,在页面上使用 SqlDataSource 可以解决该问题。 http://forums.asp.net/t/1009497.aspx.
如果有人正在寻找 VB.Net 的选项
<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" />
我记得(已经有一段时间了),没有什么特别的魔力 <%#Bind(
. 。只是 #Bind(
在 <%....%> 内。这意味着你想要:
<% ! #Bind("IsDefaultMessage") %>'
代码
Checked='<%# Eval("IsDefaultMessage").ToString().Length() > 4 %>'
如果isDefaultMessage为false,将返回true,因为“ false” .length = 5和“ true”。