2010-08-09 10 views
8

मैं गतिशील एचटीएमएल पाठ बॉक्स पर विकलांग विशेषता निर्धारित करने की कोशिश कर रहा हूँ और होने मुद्दोंमैं asp.net-mvc में HTML टेक्स्टबॉक्स पर अक्षम विशेषता कैसे सेट करूं?

मैं मेरे विचार में यह करने की कोशिश की:

string disabledString = ""; 
if (SomeLogic) 
{ 
     disabledString = "disabled"; 
} 

Html.Textbox()...new Dictionary<string, object> { { "maxlength", 50 }, { "disabled", readOnlyState } })%> 

आप मैं विकलांग विशेषता "के लिए" या की स्थापना कर रहा हूँ देख सकते हैं अक्षम लेकिन जब मैं परीक्षण करता हूं, तो यह किसी भी मामले में अक्षम होना प्रतीत होता है। क्या मुझे कुछ याद आ रही है?

+0

देता है, तो HTML spec को अक्षम करने के लिए कहा जाता है यदि यह तत्व में "अक्षम" (किसी भी मान के साथ) की विशेषता को देखता है। नीचे अपना कामकाज देखें। – Robaticus

+0

मुझे आशा है कि आप डेटा को बदलने से रोकने के लिए केवल अक्षम विशेषता के आधार पर नहीं हैं? फॉर्म टैपरिंग का एक छोटा सा हिस्सा उन्हें "रीडोनली" मान बदलने की अनुमति देगा यदि आपकी बाइंडिंग इसे अनुमति देती है। –

+0

@ नेथन टेलर - क्या आप यहां स्पष्ट कर सकते हैं कि आपका क्या मतलब है? – leora

उत्तर

16

यह हमारे लिए बदसूरत था, इस तथ्य के कारण कि HTML spec यहां लुभावना है।

bool isPlatformOwner = false; 

object disabledAttributes = new { @disabled="disabled", @readonly="readonly" }; 

//omitted code setting isPlatformOwner  

    if (isPlatformOwner) 
    { 
     disabledAttributes = new { }; 
    } 

फिर, हमारे नियंत्रण के लिए, हम इस किया था:

मूल रूप से हमारे विचार कोड में हम इस तरह कुछ तर्क था

<%=Html.CheckBoxFor(f => f.AddToReleaseIndicator, disabledAttributes)%> 

बेनामी प्रकार हमें यहाँ बचाया, लेकिन, मैं की तरह कहा, यह थोड़ा बदसूरत हो गया।

+0

अच्छा नहीं है ... लेकिन मदद की। +1 – Eddie

1

मुझे लगता है कि जब आप इसे सक्षम करना चाहते हैं तो आप अक्षम विशेषता को पूरी तरह से मिटाना चाहते हैं। पुराने ब्राउज़र निम्नलिखित और अक्षम टेक्स्ट बॉक्स में दिखेगा: में

<input type="text" disabled></input> 

दूसरे शब्दों में पुराने एचटीएमएल इसलिए संगतता कारणों के लिए आप सिर्फ विशेषता छोड़ देना चाहिए अगर आप इसे प्रस्तुत करना चाहता हूँ = "अक्षम" आवश्यक नहीं था सही। मुझे यकीन नहीं है कि अगर आप सख्त डॉक्टरेट की कोशिश करते हैं तो क्या होता है।

+0

मुझे उपरोक्त प्रारूप का उपयोग करने की आवश्यकता है। यही वह जगह है जहां मैं इस html.textbox प्रारूप का उपयोग कर सशर्त विशेषता को जोड़ने के तरीके पर अटक गया हूं? – leora

3

असल में ऐसा करने के लिए एचटीएमएल हेल्पर में एक एक्सटेंशन क्लास लिखना संभव है लेकिन आपको कई ओवरराइड लागू करना होगा ताकि मुझे मिला सबसे तेज़ समाधान एक शब्दकोश एक्सटेंशन लिखना था।

आप इस के लिए वर्ग नीचे का उपयोग कर सकते हैं:

public static class DictionaryExtensions 
{ 
    public static Dictionary<string, object> WithAttrIf(this Dictionary<string,object> dictionary,bool condition, string attrname, object value) 
    { 
     if (condition) 
      dictionary[attrname] = value; 

     return dictionary; 
    } 

    public static Dictionary<string, object> WithAttr(this Dictionary<string, object> dictionary, string attrname, object value) 
    { 

     dictionary[attrname] = value; 

     return dictionary; 
    } 
} 

इसका इस्तेमाल करने के लिए आपका ध्यान में रखते हुए कक्षा आयात और आपके विचार कोड इस तरह दिखता है:

@Html.TextBoxFor(m => m.FirstName, new Dictionary<string, object>().WithAttr("class","input-large").WithAttrIf(!string.IsNullOrWhiteSpace(Model.FirstName),"readonly","yes")) 

आप के रूप में कई गुण जोड़ सकते हैं जैसा कि आप चाहते हैं कि एक्सटेंशन विधि शब्दकोश को मूल्य जोड़ती है और शब्दकोश को खुद को

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