आप Resharper को कैसे बता सकते हैं कि एक विधि पैरामीटर एक स्ट्रिंग है जिसमें CSS वर्ग है?


118

[सीएसएस वर्गों के लिए HTML हेल्पर विशेषता पर intelisense सक्षम करें]

मेरे पास यह HTMLhelper है:

public IHtmlString MyTextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TProperty>> propertyExpression, 
    string cssClass)
{
    // ...
}

मैं चाहता हूं कि "cssClass" पैरामीटर के लिए मान पास करते समय मुझे मेरे आवेदन में परिभाषित सीएसएस वर्गों के लिए IntelliSense देना होगा।

कुछ कोड एनोटेशन विशेषताएँ हैं जिन्हें रेस्परर पहचानता है, लेकिन कोई भी जो सीधे सीएसएस वर्गों के रूप में एक विधि पैरामीटर को चिह्नित करने से संबंधित नहीं है।

निकटतम मैं पा सकता था [HtmlAttributeValue (स्ट्रिंग नाम)] । मैंने इस तरह cssClass पैरामीटर पर लागू करने की कोशिश की:

public IHtmlString MyTextBoxFor<TModel, TProperty>(
    this HtmlHelper<TModel> html, 
    Expression<Func<TModel, TProperty>> propertyExpression, 
    [HtmlAttributeValue("class")] string cssClass)
{
    // ...
}

लेकिन वह काम नहीं करता है। यह भी बहुत बढ़िया होगा, अगर रेस्पर ने दर्ज की गई कक्षा को पहचान लिया और मुझे jQuery चयनकर्ता अभिव्यक्तियों में अज्ञात सीएसएस कक्षाओं के बारे में बताने से रोक दिया (जो कि सहायक द्वारा उत्पन्न टेक्स्टबॉक्स पर काम करते हैं)।

संपादित करें: यहां एक तरह की इंटैलिजेंस का स्क्रीनशॉट है जो एक एक्शन विधि के "htmlAttributes" पैरामीटर के लिए काम कर रहा है। यह पैरामीटर पर [HtmlElementAttributes] एनोटेशन का उपयोग करके पूरा किया जाता है।

Resharper htmlAttributes intellisense

मुझे एक समान एनोटेशन चाहिए जो मुझे सीएसएस कक्षाओं को एक स्ट्रिंग पैरामीटर में रखने की अनुमति देता है और एक ही इंटैलिजेंस सीएसएस कक्षाएं दिखा रहा है।


10
: ReSharper बगट्रैकर पर एक मुद्दा खोला youtrack.jetbrains.com/issue/RSRP-389238
Raif अतेफ

4
अच्छा सवाल है, मैं इसका जवाब भी जानना चाहता हूं।
मुर्तजा मुंशी

2
@RaifAtef ReSharper में पहले से मौजूद है, क्या आप इसके बारे में बात करने का स्क्रीनशॉट जोड़ सकते हैं और यह सुनिश्चित करने के लिए कि आपकी
स्टैकओवरफ्लो के

2
@Seabizkit यह आपके द्वारा प्राप्त किए जाने वाले इंटैलिसेंस के समान है जब आप "रिटर्न व्यू" लिख रहे होते हैं और आप व्यू नामों के साथ इंटेलीसेंस प्राप्त करते हैं, या जब आप "एचटीएमएल.एक्शन" ("एचटीएमएल" कह रहे होते हैं और कंट्रोलर और एक्शन नाम के लिए आपको इन्टेलिसेंस मिलता है। मैं सिर्फ ReSharper शो मुझे सीएसएस वर्गों बनाने के लिए जब मैं cssClass पैरामीटर के लिए मूल्य प्रवेश कर रहा हूँ चाहता हूँ संपादित करें: नहीं मेरे सवाल तुम्हारा से diffferent है तुम्हारा एक अंतर्निहित वी.एस. बात है, मेरा सख्ती से ReSharper संबंधित
Raif अतेफ

3
@RaifAtef, ठीक है .. समस्या यह है, मेरे पास ReSharper स्पष्ट रूप से है, लेकिन यह नहीं देख सकता कि ReSharper की क्या विशेषता है जिसके बारे में आप बात कर रहे हैं ... मैं बस सामान्य अंतर्निर्मित अंतरंगता देख रहा हूँ ... मैं वास्तव में आपकी रुचि के अनुसार हूँ कुछ ReSharper जादू याद आ रही है, लेकिन मैं इसे नहीं देख सकता। क्या आप कृपया एक स्क्रीनशॉट पोस्ट कर सकते हैं कि मुझे क्या देखना चाहिए। मैंने "Html.Action (" और "Html.MyCustomStuff" दोनों के बीच कोई अंतर नहीं देखा। ReSharper 9.1.3 का उपयोग करना, जो नवीनतम में से एक की तरह है।
Seabizkit

जवाबों:


3

[ValueProvider] का उपयोग करें

वर्तमान में Resharper 10 द्वारा समर्थित कोड एनोटेशन से , सबसे अच्छा उम्मीदवार इस विशेषता का उपयोग करेगा। उपरोक्त लिंक से:

ValueProviderAttribute

एक पैरामीटर के लिए जो मूल्यों के सीमित सेट में से एक होने की उम्मीद है। इस पैरामीटर के लिए किस फ़ील्ड का उपयोग मान के रूप में निर्दिष्ट किया जाना चाहिए।

दुर्भाग्य से, मुझे पता नहीं चला कि यह कैसे काम करता है। शायद यह मेरे Resharper संस्करण 9.2 में छोटी गाड़ी है।

मैंने अब तक क्या प्रयास किया है:

namespace ValueProviderSample
{
    public static class MyValuesContainer
    {
        public static readonly string[] Values = { "one", "two", "three" };
    }

    public class MyMethodContainer
    {
        public string MyMethod([ValueProvider("ValueProviderSample.MyValuesContainer.Values")]
                               string parameter)
        {
            return string.Empty;
        }
    }
}

यहां तक ​​कि अगर आप इसे काम करते हैं, तब भी आपको मान सूची को पॉप्युलेट करना होगा।

और निश्चित रूप से, आप अभी भी अपने कोड एनोटेशन / एक्सटेंशन को Resharper के लिए विकसित कर सकते हैं।

स्ट्रिंग के बजाय एक मजबूत टाइप की गई वस्तु का उपयोग क्यों नहीं किया जाता है?

कभी-कभी उपयोग करने के बजाय stringऔर int, हम अपने स्वयं के डिजाइन के मजबूत-टाइप किए गए वर्गों का उपयोग कर सकते हैं। चूंकि ऐसा लगता है कि आप अपने कोड को नियंत्रित करते हैं, इसलिए आप stringइसमें css नाम का उपयोग करने के बजाय , आप एक नया प्रकार बना सकते हैं CssClass

आपको बस एक प्रीबिलीट ईवेंट के रूप में एक जनरेटर को कॉल करने की आवश्यकता है जो परियोजना में हर सीएसएस को पार्स करता है और गतिशील रूप से इस तरह एक वर्ग बनाता है:

public class CssClass
{
    public string Name { get; private set; }

    public static CssClass In = new CssClass("in");

    /// <summary>
    /// Initialise une nouvelle instance de la classe <see cref="T:System.Object"/>.
    /// </summary>
    private CssClass(string name)
    {
        Name = name;
    }
}

और फिर आपका नमूना ऐसा दिखेगा:

public class MySample
{
    public IHtmlString MyTextBoxFor<TModel, TProperty>(
        this HtmlHelper<TModel> html,
        Expression<Func<TModel, TProperty>> propertyExpression,
        CssClass cssClass)
    {
        // ...
    }

    public void Usage()
    {
        MyTextBoxFor(html, expression, CssClass.In);
    }
}

यह दिलचस्प है, लेकिन इस सवाल का जवाब नहीं देता है, क्योंकि इसमें सीएसएस की सभी कक्षाएं अपनी सीएसएस फाइलों में इस्तेमाल नहीं होंगी।
रायफ एटेफ
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.