2009-03-04 21 views
12

Bir düğmenin etkinleştirilmiş durumunu bir değerin olumsuzlanması olarak ayarlamak istiyorum."Eval" kullanan bir öznitelikteki değeri reddedebilir miyim?

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

nasıl LinkButton'a Enabled nitelik falseIsDefaultMessage == true eğer yapabilirsiniz:

Yani bu kodu verilen?

cevap

20

Eval yerine Bind kullanın. Bind, iki yönlü bağlantı içindir, yani verileri veri kaynağınıza geri yükleyebilmeniz gereken durumlarda.

Bind'i kullandığınızda, derlenmiş sayfa, değeri ayarlamak için Eval'ı ve kaydetme değerini okumak için bazı kodları kullanan bir kod üretecektir. Bind, oluşturulan kodla değiştirildiğinden, Bind ile ekstra bir mantık kullanamazsınız.

<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

Hatırladığım kadarıyla (Bir süredir), <%#Bind('da belirli bir sihir yoktur. Sadece #Bind( içinde <% ....%> var. demek ki sen isterdim: Eğer Eval kullanabiliyorsa

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

ile bir seçenek işe yaramazsa ... <%#...%>, ASP.NET'in bunu bilmesini sağlar. Veri bağlama sırasında yer alıyor ... # sonra gitmelisin. –

5

, bu Control sınıfın sadece bir yöntemdir. Bu sadece özel bir veri bloğu <%# ... %> bloğunda olması gerektiği için özeldir. Bunun dışında, temelde düzenli <%= %> ifade bloğu gibi blok davranabilirsiniz:

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

yine de (Eval gidiş-dönüş değildir) bağlayın isterseniz, geri inkâr gerekir daha ve veri bağlama sırasında. Kontrolünü yeniden söyleyebiliyorsanız, bunu yapmanız gerekmeyebilir. Örneğin, bir onay kutusu, "Varsayılan İleti Yok" etiketini etiketlemek yerine, "Varsayılan İleti Olduğunu" yazıp, onu ileri ve geri almayı reddetmek yerine. Contrived örnek, ama sen fikir edin.

+0

Bunun yapılması "geçersiz önişlemci yönergesi" hatası veriyor. Nasıl çözüleceğine dair bir fikrin var mı? – KevDog

+0

Ayrıca, "Operatör! Tip nesnesinin işleneni uygulayamıyor" – KevDog

+0

Haklısınız - Bind, sahip olduğum gibi kullanılamaz. Bunu Eval'a değiştirdim ve çözümü nasıl kullanacağımı anlattım. –

1

Hiç Bağlama kullanmamıştım ancak benim anlayışım, Databinder.Eval'e benzer. Her iki yöntemde de, her iki yöntem de nesneleri döndürür, böylece değerlendirmeden önce bir boole dönüştürmeniz gerekir.

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

Düzenleme: Bu yapıldığında ve sorunu çözmek için sayfada bir SqlDataSource kullanarak edilemez gibi görünüyor. http://forums.asp.net/t/1009497.aspx.

+0

'a dökülmeyle düzeltildi. Bu," Bind "adı geçerli bağlamda mevcut değil" hatası veriyor. " – KevDog

+0

Bind kullanmak istediğiniz için bir neden var mı?" DataBinder.Eval kullanarak? <% #! Convert.ToBoolean (DataBinder.Eval (Container.DataItem, "IsDefaultMessage"))%> – rmw

+0

İşte bu konuda bir forum: http://forums.asp.net/t/1009497 .aspx Sayfanıza bir SqlDataSource ekleyebilir misiniz? Bu işe yarayabilir gibi görünüyor. – rmw

-1

IsDefaultMessage yanlışsa

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

gerçek dönecektir kod "Yanlış" .length = 5 ve "True" .length = 4

1

durumda birileri arıyor yana VB.Net

İlgili konular