คุณจะบอก Resharper ได้อย่างไรว่าพารามิเตอร์เมธอดคือสตริงที่มีคลาส CSS


118

[เปิดใช้งาน intellisense บนแอตทริบิวต์ HTMLHelper สำหรับคลาส css]

ฉันมี HTMLhelper นี้:

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

ฉันต้องการให้ Resharper ให้ IntelliSense สำหรับคลาส CSS ที่กำหนดไว้ในแอปพลิเคชันของฉันเมื่อส่งผ่านค่าสำหรับพารามิเตอร์ "cssClass"

มีแอตทริบิวต์คำอธิบายประกอบโค้ดบางอย่างที่ Resharper รู้จัก แต่ไม่มีอะไรที่เกี่ยวข้องโดยตรงกับการทำเครื่องหมายพารามิเตอร์เมธอดว่าเป็นคลาส CSS

ที่ใกล้เคียงที่สุดที่ฉันสามารถหาเป็น[HtmlAttributeValue (ชื่อสตริง)] ฉันพยายามใช้กับพารามิเตอร์ cssClass ดังนี้:

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

แต่นั่นไม่ได้ผล มันจะยอดเยี่ยมมากถ้า Resharper สามารถจดจำคลาสที่ป้อนและหยุดการรบกวนฉันเกี่ยวกับคลาส CSS ที่ไม่รู้จักในนิพจน์ตัวเลือก jQuery (ซึ่งทำงานบนกล่องข้อความที่สร้างโดยตัวช่วยด้านบน)

แก้ไข: นี่คือภาพหน้าจอของประเภท Intellisense ที่ใช้งานได้กับพารามิเตอร์ "htmlAttributes" ของวิธีการดำเนินการ สิ่งนี้ทำได้โดยใช้คำอธิบายประกอบ [HtmlElementAttributes] บนพารามิเตอร์

Resharper html คุณสมบัติ intellisense

ฉันต้องการคำอธิบายประกอบที่คล้ายกันซึ่งให้ฉันใส่คลาส css ในพารามิเตอร์สตริงและมี intellisense เดียวกันปรากฏขึ้นโดยแสดงคลาส css


10
เปิดปัญหาใน ReSharper bugtracker: youtrack.jetbrains.com/issue/RSRP-389238
Raif Atef

4
คำถามที่ดีฉันต้องการทราบคำตอบเช่นกัน
Murtaza Munshi

2
@RaifAtef มีอยู่แล้วใน ReSharper คุณช่วยเพิ่มภาพหน้าจอของสิ่งที่คุณพูดถึงและเพื่อให้แน่ใจว่าคุณไม่ได้พูดถึงstackoverflow.com/questions/529677/…
Seabizkit

2
@Seabizkit มันคล้ายกับ Intellisense ที่คุณได้รับเมื่อคุณเขียน "return View (" และคุณจะได้รับ intellisense ด้วยชื่อมุมมองหรือเมื่อคุณเรียก "Html.Action (" และคุณจะได้รับ intellisense สำหรับคอนโทรลเลอร์และชื่อการดำเนินการ ฉันแค่ต้องการทำให้ resharper แสดงคลาส CSS เมื่อฉันป้อนค่าสำหรับพารามิเตอร์ cssClass แก้ไข: ไม่มีคำถามของฉันแตกต่างจากของคุณคุณเป็นสิ่ง VS ในตัวของฉันเกี่ยวข้องกับ resharper อย่างเคร่งครัด
Raif Atef

3
@RaifAtef โอเค .. ปัญหาคือฉันมี ReSharper อย่างเห็นได้ชัดแต่ไม่สามารถมองเห็นคุณสมบัติของ ReSharper ที่คุณกำลังพูดถึง ... ฉันเพิ่งเห็น intellisense ในตัวปกติ ... ฉันสนใจอย่างแท้จริงเพราะบางทีฉัน พลาดเวทมนตร์ 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.

คุณเพียงแค่ต้องเพิ่มเป็นเหตุการณ์ที่สร้างไว้ล่วงหน้าการเรียกไปยังเครื่องกำเนิดไฟฟ้าซึ่งแยกวิเคราะห์ทุก css ในโครงการและสร้างคลาสแบบไดนามิกดังนี้:

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);
    }
}

สิ่งนี้น่าสนใจ แต่ไม่ตอบคำถามเนื่องจากจะไม่มีคลาส CSS ทั้งหมดที่แอปใช้กับไฟล์ CSS ทั้งหมด
Raif Atef
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.