2009-03-04 12 views
12

मैं एक बटन की सक्षम स्थिति को मान की अस्वीकृति के रूप में सेट करना चाहता हूं।क्या मैं "एवल" का उपयोग करने वाली विशेषता में मान को अस्वीकार कर सकता हूं?

<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 कैसे कर सकते हैं:

तो यह कोड दिया?

उत्तर

20

बाइंड के बजाय इवल का उपयोग करें। बाइंड दो-तरफा बाध्यकारी है, यानी उन मामलों के लिए जहां आपको डेटा को अपने डेटा स्रोत पर वापस सहेजने में सक्षम होना चाहिए।

जब आप बाइंड का उपयोग करते हैं, तो संकलित पृष्ठ वास्तव में जेनरेट कोड होगा जो मूल्य निर्धारित करने के लिए 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( में कोई विशेष जादू नहीं है। यह <% के अंदर 0% है।%>। इसका मतलब है आप चाहते हैं चाहते हैं:

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

यह एक काम नहीं करेगा ... <%#...%> ASP.NET को यह पता है कि यह है डाटाबेसिंग के दौरान हो रहा है ...! # के बाद जाना चाहिए। –

5

आप Eval का उपयोग कर सकते हैं, तो यह सिर्फ Control वर्ग की एक विधि है। यह केवल विशेष है कि इसे डेटा बाउंड ब्लॉक <%# ... %> के संदर्भ में होना चाहिए। उसके अलावा, आप मूल रूप से एक नियमित रूप से <%= %> अभिव्यक्ति ब्लॉक की तरह ब्लॉक का इलाज कर सकते हैं:

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

आप अभी भी इसे (Eval राउंड ट्रिप नहीं है) में आबद्ध चाहते हैं, की तुलना में आप इसे वापस नकारना करने की आवश्यकता होगी और डेटाबेस के दौरान आगे। यद्यपि आप इसे फिर से नियंत्रित कर सकते हैं, हालांकि आपको ऐसा करने की आवश्यकता नहीं हो सकती है। उदाहरण के लिए, यदि चेक बॉक्स को उपयोगकर्ता के लिए "डिफ़ॉल्ट संदेश नहीं है" लेबल करने के बजाय और इसे आगे और पीछे अस्वीकार करने के बजाय, "डिफ़ॉल्ट संदेश" है। योगदान उदाहरण, लेकिन आपको विचार मिलता है।

+0

ऐसा करने से "अमान्य प्रीप्रोसेसर निर्देश नोड" त्रुटि फेंकता है। हल करने के तरीके पर कोई विचार? – KevDog

+0

इसके अलावा, "टाइप ऑब्जेक्ट के संचालन के लिए ऑपरेटर लागू नहीं हो सकता है" – KevDog

+0

आप सही हैं - बाइंड का उपयोग नहीं किया जा सकता जैसा कि मैंने किया था। मैंने इसे इवल में बदल दिया और बताया कि बाइंड उपयोग को कैसे हल किया जाए। –

1

मैंने कभी बाइंड का उपयोग नहीं किया है, लेकिन मेरी समझ यह है कि यह डाटाबेसर के समान है। औसत। किसी भी तरह से, दोनों विधियां ऑब्जेक्ट लौटाती हैं ताकि आपको इसका मूल्यांकन करने से पहले इसे बुलियन में डालना होगा।

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

संपादित करें: ऐसा लगता है कि यह नहीं किया जा सकता है और पृष्ठ पर एक SQLDataSource का उपयोग समस्या को हल करेगा। http://forums.asp.net/t/1009497.aspx

+0

पर कास्टिंग करके फिक्स्ड यह त्रुटि को फेंक देता है" नाम 'बाइंड' वर्तमान संदर्भ में मौजूद नहीं है " – KevDog

+0

क्या कोई कारण है कि आप बाइंड का उपयोग करना चाहते हैं? क्या आपने कोशिश की है DataBinder.Eval का उपयोग कर? <% #! कनवर्ट करें। ToBoolean (DataBinder.Eval (कंटेनर। डेटाटाइम, "IsDefaultMessage"))%> – rmw

+0

यहां इस समस्या के बारे में एक मंच है: http://forums.asp.net/t/1009497 .aspx। क्या आप अपने पेज पर एक SQLDataSource जोड़ सकते हैं? ऐसा लगता है कि यह काम कर सकता है। – rmw

-1

कोड

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

सच वापस आ जाएगी अगर IsDefaultMessage गलत है के बाद से "गलत" .Length = 5 और "सही" .Length = 4

1

मामले में किसी की तलाश में है VB.Net

<asp:CheckBox ID="DefaultChecked" Checked='<%# NOT (Eval("IsDefaultMessage")) %>' Enabled="false" runat="server" /> 
संबंधित मुद्दे

 संबंधित मुद्दे