2012-03-08 11 views
10

मैं DropDownListFor के लिए एक एक्सटेंशन लिखने के लिए कोशिश कर रहा हूँ के लिए विस्तार में अतिरिक्त htmlattributes कैसे जोड़ें:DropDownListFor

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled) 
{ 
    return htmlHelper.DropDownListFor(expression, selectList, null /* optionLabel */, HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); 
} 

क्या मैं प्राप्त करने के लिए सक्षम हो जाता है चाहता हूँ गलत है कोई परिवर्तन नहीं लेकिन यदि सक्षम सच है मैं चाहता हूँ AnonymousObjectToHtmlAttributes पर देने से पहले HTML गुणों में @disabled="disabled" जोड़ें।

यह कैसे करें इस पर कोई विचार है?

उत्तर

30

सरल! HtmlHelper.AnonymousObjectToHtmlAttributesRouteValueDictionary देता है। आप उस शब्दकोश में मूल्य जोड़ सकते हैं, आपको अज्ञात ऑब्जेक्ट में संपत्ति जोड़ने की आवश्यकता नहीं है।

public static MvcHtmlString DropDownListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, object htmlAttributes, bool enabled) 
{ 
    var attrs = HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes); 
    if (!enabled) 
    { 
     attrs.Add("disabled", "disabled"); 
    } 
    return htmlHelper.DropDownListFor(expression, selectList, null /* optionLabel */, attrs); 
} 
+3

एक सहायक लिखने के लिए कोई ज़रूरत नहीं, बस अधिभार के रूप में दिमित्री पता चलता है कि htmlAttributes स्वीकार करता है का उपयोग करें। – RickAndMSFT

+2

@ रिक। एंडरसन-at-Microsoft.com मैं सहमत नहीं होगा। सबसे पहले, प्रश्न अन्य तरीकों का उपयोग करने की संभावना नहीं, विशेषता जोड़ने के बारे में था। और दूसरा, इस मामले में सहायक बनाना बहुत अधिक पठनीय है, फिर सक्षम स्थिति की जांच कर रहा है और फिर – archil

2

संग्रह कार्यों द्वारा समाधान। हालांकि, जो आप एक एक्सटेंशन लिखने की कोशिश कर रहे हैं उसके लिए एक ओवरकिल है।

वैसे ही जैसे आपके विचार कुछ में लिखें:

@Html.DropDownListFor(m => m.Id, Model.Values, new { disabled = "disabled" }) 
+0

से सही विधि अधिभार को कॉल करना हाँ, यह काम करता है लेकिन यह थोड़ा अधिक जटिल है क्योंकि यह हमेशा अक्षम नहीं होता है, यह किसी संपत्ति पर निर्भर करता है। मुझे यकीन नहीं है कि आप इसे कैसे लिखेंगे क्योंकि आपके पास कोई विशेषता नहीं है, यदि सक्षम है तो सक्षम है लेकिन सक्षम के लिए अक्षम = "अक्षम" गलत है – AnonyMouse

+2

हाँ, अक्षम विशेषता के लिए एचटीएमएल चश्मा (केवल पढ़ने के लिए) एक आपदा है। कानूनी रूप से वे केवल विशेषता का नाम ही ले सकते हैं। हालांकि, अधिकांश ब्राउज़रों को इन विशेषताओं के लिए कुछ भी स्वीकार करने के लिए सिखाया जाता है, यही कारण है कि विकलांग = "झूठी" आपके लिए एक अक्षम विशेषता में भी परिणाम देगा। आप अपनी संपत्ति के साथ अगर किसी स्टेटमेंट के साथ स्टेटमेंट को चेक कर सकते हैं तो पूरे ड्रॉपडाउनलिस्ट को लपेट सकते हैं। हालांकि, मैं देखता हूं कि विस्तार के साथ यह एक कम कोड होगा। – Dmitry

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