আপনি কীভাবে রিশার্পারকে বলতে পারেন যে কোনও পদ্ধতি পরামিতি একটি স্ট্রিং যা একটি CSS বর্গ থাকে?


118

[সিএসএস ক্লাসের জন্য এইচটিএমএল হেল্পার অ্যাট্রিবিউটে ইন্টেলিজেন্স সক্ষম করুন]

আমার এই এইচটিএমএল সহায়তা রয়েছে:

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

আমি চাই যে "সিএসএসক্লাস" প্যারামিটারের মান পাস করার সময় আমার অ্যাপ্লিকেশনটিতে সংজ্ঞায়িত সিএসএস ক্লাসের জন্য রিশার্পার আমাকে ইনটেলিসেন্স দেবে।

কিছু কোড টীকা বৈশিষ্ট্য রয়েছে যা রিশার্পার স্বীকৃতি দিয়েছিল তবে কোনওটিই সিএসএস ক্লাস হিসাবে কোনও পদ্ধতি প্যারামিটারকে চিহ্নিত করার সাথে সরাসরি সম্পর্কিত বলে মনে হচ্ছে না।

আমি যে নিকটতম সন্ধান করতে পেরেছিলাম তা হ'ল [এইচটিএমএল অ্যাট্রিবিউটভ্যালু (স্ট্রিংয়ের নাম)] । আমি এই জাতীয় CSS ক্লাস প্যারামিটারে প্রয়োগ করার চেষ্টা করেছি:

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

কিন্তু এটি কাজ করে না। এটি আরও দুর্দান্ত হবে যদি রেশার্পার প্রবেশ করা শ্রেণিটি স্বীকৃতি দেয় এবং jQuery সিলেক্টর এক্সপ্রেশনগুলিতে অজানা সিএসএস ক্লাস সম্পর্কে আমাকে বগিং বন্ধ করে দেয় (যা উপরের সহায়ক দ্বারা উত্পাদিত টেক্সটবক্সে কাজ করে)।

সম্পাদনা করুন: এখানে এমন ধরণের ইন্টেলিজেন্সের একটি স্ক্রিনশট রয়েছে যা কোনও ক্রিয়া পদ্ধতির "htmlAttributes" পরামিতির জন্য কাজ করছে। এটি প্যারামিটারে [HtmlElementAttributes] টিকা ব্যবহার করে সম্পন্ন হয়।

পুনঃভাগের এইচটিএমএল ইন্টেলিসেন্সকে ভাগ করে

আমি অনুরূপ একটি টীকা চাই যা আমাকে স্ট্রিং প্যারামিটারে CSS ক্লাস স্থাপন করতে এবং একই বুদ্ধিমানের CSS ক্লাস দেখায়।


10
রিশার্পার বাগট্র্যাকারে একটি সমস্যা খোলা হয়েছে: youtrack.jetbrains.com/issue/RSRP-389238
রাইফ আতেফ

4
চমৎকার প্রশ্ন, আমি উত্তরটিও জানতে চাই।
মুর্তজা মুন্সী

2
@RaifAtef ইতিমধ্যে ReSharper মধ্যে কোন অস্তিত্ব নেই আপনার সম্পর্কে কি কথা বলতেছেন একটি স্ক্রিনশট যোগ করতে পারিনি এবং মাত্র নিশ্চিত করুন যে আপনার কথা বলছি না করতে stackoverflow.com/questions/529677/...
Seabizkit

2
@ স্যাবিজকিট এটি "রিটার্ন ভিউ" লেখার সময় আপনি যে ইন্টেলিজেন্স পেয়েছেন তার সমান এবং আপনি যখন ভিউয়ের নামগুলি দিয়ে ইন্টেলিজেন্স পেয়েছেন বা যখন আপনি "এইচটিএমএল.অ্যাকশন (" কল করছেন) এবং আপনি কন্ট্রোলার এবং ক্রিয়াকলাপের জন্য ইন্টেলিজেন্স পেয়ে থাকেন। আমি যখন cssClass প্যারামিটারের মানটি লিখছি তখন আমাকে কেবল পুনরায় ভাগ করার সুযোগ দিতে চাই E সম্পাদনা: আমার প্রশ্নটি আপনার থেকে পৃথক নয় You আপনার একটি বিল্ট-ইন ভিএস জিনিস, আমার কঠোরভাবে পুনঃনির্মাণ সম্পর্কিত
রাইফ আতেফ

3
@ রাইফএটিফ, ঠিক আছে .. সমস্যাটি হল, আমার কাছে অবশ্যই রিশ্যার্পার আছে তবে আপনি রিসার্পার কোন বৈশিষ্ট্যের কথা বলছেন তা দেখতে পাচ্ছি না ... আমি কেবল সাধারণ অন্তর্নির্মিত ইন্টেলিজেন্স দেখি ... আমি সম্ভবত সত্যই আগ্রহী কারণ কিছু রিশার্পার যাদু হারিয়েছে, তবে আমি এটি দেখতে পাচ্ছি না। আপনি কি দয়া করে আমার একটি স্ক্রিনশট পোস্ট করতে পারেন? আমি সঙ্গে "Html.Action (" এবং "Html.MyCustomStuff" দুই মধ্যে কোনো পার্থক্য দেখতে পাচ্ছি না চেষ্টা ReSharper 9.1.3 যা সর্বশেষ এক মত হল ব্যবহার
Seabizkit

উত্তর:


3

[ভ্যালুপ্রাইডার] ব্যবহার করুন

থেকে কোড টীকা বর্তমানে Resharper 10 দ্বারা সমর্থিত হয় তবে সেরা প্রার্থী এই বৈশিষ্ট্য ব্যবহার করা হবে। উপরের লিঙ্ক থেকে:

ValueProviderAttribute

এমন একটি প্যারামিটারের জন্য যা সীমিত মানগুলির একটি হতে পারে। এই পরামিতির মান হিসাবে কোন ধরণের ক্ষেত্রগুলি নির্দিষ্ট করা উচিত তা নির্দিষ্ট করুন।

দুর্ভাগ্যক্রমে, আমি এটি বুঝতে পারি না যে এটি কীভাবে কাজ করে। হতে পারে এটি আমার রিশার্পার সংস্করণ 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;
        }
    }
}

এমনকি যদি আপনি এটি কাজ করেও, আপনাকে এখনও মান তালিকাটি পপুলি করতে হবে।

এবং অবশ্যই, আপনি এখনও পুনঃ ভাগের জন্য আপনার কোড টীকা / এক্সটেনশন বিকাশ করতে পারেন।

স্ট্রিংয়ের পরিবর্তে কোনও শক্ত টাইপ করা অবজেক্টটি ব্যবহার করছেন না কেন?

কখনও কখনও ব্যবহার করার পরিবর্তে stringএবং int, আমরা আমাদের নিজস্ব ডিজাইনের শক্তিশালী-টাইপযুক্ত ক্লাস ব্যবহার করতে পারি। যেহেতু মনে হচ্ছে আপনি নিজের কোডটি নিয়ন্ত্রণ করছেন তাই আপনি এতে stringকোনও সিএসএস নাম ব্যবহার করার পরিবর্তে নতুন ধরণের তৈরি করতে পারেন 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);
    }
}

এটি আকর্ষণীয়, তবে প্রশ্নের উত্তর দেয় না, কারণ এতে অ্যাপের দ্বারা ব্যবহৃত সমস্ত সিএসএস ক্লাস তার সমস্ত সিএসএস ফাইল জুড়ে থাকবে না।
রায়ফ আতেফ
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.