2009-03-04 75 views
12

我想將按鈕的啓用狀態設置爲值的否定。我可以否定使用「Eval」的屬性中的值嗎?

所以給出這樣的代碼:

<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​​ton的Enabled屬性false如果IsDefaultMessage == true

回答

20

使用Eval代替Bind。綁定用於雙向綁定,即用於需要將數據保存回數據源的情況。

當您使用綁定時,編譯後的頁面實際上會生成使用Eval設置值的代碼,並加上一些代碼來讀出保存的值。因爲綁定被替換爲生成的代碼,所以不能在綁定中使用任何額外的邏輯。

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

正如我記得(這是一段時間),<%#Bind(沒有什麼特別的魔法。這只是#Bind(裏面<%....%>。這意味着你會想:

<% ! #Bind("IsDefaultMessage") %>' 
+0

這將無法正常工作... <%#...%>讓ASP.NET知道它是在數據綁定過程中發生......!必須在#之後去。 – 2009-03-04 15:41:16

5

如果你可以使用eval,它只是一個Control類的方法。它的唯一特別之處在於它需要位於數據綁定塊<%# ... %>的上下文中。除此之外,你基本上可以把塊像一個普通的<%= %>表達式塊:

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

如果你想還是把它綁定(EVAL不是往返),比你需要否定回數據綁定期間。如果你可以重新命名控制權,你可能不需要這樣做。例如,如果使用複選框而不是將其標記爲「不是默認消息」並且將其反向否定,而不是將其標記爲「默認消息」。有爭議的例子,但你明白了。

+0

這樣做會引發「無效的預處理器指令節點」錯誤。任何想法如何解決? – KevDog 2009-03-04 15:47:35

+0

另外,「不能將運算符應用於類型對象的操作數」 – KevDog 2009-03-04 15:49:01

1

我從來沒有使用綁定,但我的理解是它與Databinder.Eval類似。無論哪種方式,兩種方法都會返回對象,因此您需要在評估之前將其轉換爲布爾值。

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

編輯:看起來像這樣做不能完成,並使用頁面上的SqlDataSource將解決問題。 http://forums.asp.net/t/1009497.aspx

-1

的代碼,如果IsDefaultMessage是假

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

將返回true 由於 「假」。長度= 5, 「真」。長度= 4

1

萬一有人找一個選項與VB.Net

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" /> 
相關問題