13

我想将按钮的启用状态设置为值的否定。

所以给定这段代码:

<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" />

如果是,我如何制作 LinkBut​​tonEnabled属性?falseIsDefaultMessage == true

4

6 回答 6

23

使用 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"/>
于 2009-03-05T11:30:19.213 回答
6

如果你可以使用Eval,它只是Control类的一个方法。它的特殊之处在于它需要在数据绑定块的上下文中<%# ... %>。除此之外,您基本上可以将块视为正则<%= %>表达式块:

<%# !(bool)Eval("IsDefaultMessage") %>

如果您仍然想绑定它(Eval 不是往返),那么您需要在数据绑定期间来回否定它。但是,如果您可以重新定义控件,则可能不需要这样做。例如,如果一个复选框,而不是将其标记为“不是默认消息”给用户并来回否定它,而是将其标记为“是默认消息”。人为的例子,但你明白了。

于 2009-03-04T15:33:50.990 回答
2

如果有人正在寻找 VB.Net 的选项

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" />
于 2016-07-14T08:46:08.870 回答
1

我从未使用过 Bind,但我的理解是它类似于 Databinder.Eval。无论哪种方式,这两种方法都返回对象,因此您需要在评估它之前将其转换为布尔值。

<%# !Convert.ToBoolean(Bind("IsDefaultMessage") %>

编辑:看起来这无法完成,在页面上使用 SqlDataSource 可以解决问题。http://forums.asp.net/t/1009497.aspx

于 2009-03-04T15:58:38.623 回答
-1

我记得(已经有一段时间了),在<%#Bind(. 它就#Bind( 在 <%....%> 里面。这意味着你想要:

 <%  ! #Bind("IsDefaultMessage") %>'
于 2009-03-04T15:28:46.760 回答
-1

编码

Checked='<%# Eval("IsDefaultMessage").ToString().Length() > 4 %>'

如果 IsDefaultMessage 为 false,将返回 true 因为 "False".Length = 5 和 "True".Length = 4

于 2012-03-28T15:09:47.663 回答