Làm thế nào để bạn nói với Resharper rằng một tham số phương thức là một chuỗi chứa một lớp CSS?


118

[Bật intellisense trên thuộc tính HTMLHelper cho các lớp css]

Tôi có HTMLhelper này:

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

Tôi muốn Resharper cung cấp cho tôi IntelliSense cho các lớp CSS được xác định trong ứng dụng của tôi khi chuyển giá trị cho tham số "cssClass".

Có một số thuộc tính chú thích mã mà Resharper nhận ra, nhưng không có thuộc tính nào có vẻ liên quan trực tiếp đến việc đánh dấu một tham số phương thức là các lớp CSS.

Gần nhất tôi có thể tìm thấy là [HtmlAttributeValue (tên chuỗi)] . Tôi đã cố gắng áp dụng cho tham số cssClass như sau:

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

Nhưng điều đó không hiệu quả. Cũng sẽ rất tuyệt nếu Resharper nhận ra lớp đã nhập và ngừng làm phiền tôi về các lớp CSS không xác định trong các biểu thức bộ chọn jQuery (hoạt động trên hộp văn bản được tạo bởi trình trợ giúp ở trên).

Chỉnh sửa: Đây là ảnh chụp màn hình của loại intellisense đang hoạt động cho tham số "htmlAttributes" của một phương thức hành động. Điều này được thực hiện bằng cách sử dụng chú thích [HtmlElementAttributes] trên tham số.

Resharper htmlAttributes intellisense

Tôi muốn một chú thích tương tự cho phép tôi đặt các lớp css trong một tham số chuỗi và có cùng một intellisense xuất hiện hiển thị các lớp css.


10
Mở một vấn đề trên ReSharper bugtracker: youtrack.jetbrains.com/issue/RSRP-389238
Raif Atef

4
Câu hỏi hay, tôi cũng muốn biết câu trả lời.
Murtaza Munshi

2
@RaifAtef Điều này đã tồn tại trong ReSharper, bạn có thể thêm một ảnh chụp màn hình của những gì nói chuyện của bạn về và chỉ để chắc chắn bạn không nói về stackoverflow.com/questions/529677/...
Seabizkit

2
@Seabizkit nó tương tự như intellisense mà bạn nhận được khi viết "return View (" và bạn nhận được intellisense với các tên của khung nhìn, hoặc khi bạn đang gọi "Html.Action (" và bạn nhận được intellisense cho tên bộ điều khiển và hành động. Tôi chỉ muốn đặt resharper hiển thị cho tôi các lớp CSS khi tôi nhập giá trị cho tham số cssClass. CHỈNH SỬA: Không có câu hỏi của tôi khác với câu hỏi của bạn. Của bạn là một thứ VS tích hợp sẵn, của tôi là liên quan chặt chẽ đến resharper.
Raif Atef

3
@RaifAtef, Ok .. vấn đề là, tôi có ReSharper rõ ràng nhưng không thể thấy tính năng nào của ReSharper mà bạn đang nói đến ... Tôi chỉ thấy intellisense được tích hợp sẵn bình thường ... Tôi thực sự quan tâm vì có lẽ tôi đang bỏ lỡ một số phép thuật ReSharper, nhưng tôi không thể nhìn thấy nó. Bạn có thể vui lòng đăng một bức ảnh chụp màn hình về những gì tôi sẽ thấy. Tôi đã thử với "Html.Action (" và "Html.MyCustomStuff" không thấy bất kỳ sự khác biệt giữa hai sử dụng ReSharper 9.1.3 mà là giống như một trong những mới nhất..
Seabizkit

Câu trả lời:


3

Sử dụng [ValueProvider]

Từ Chú thích mã hiện được hỗ trợ bởi Resharper 10, ứng cử viên tốt nhất sẽ sử dụng thuộc tính này. Từ liên kết trên:

ValueProviderAttribute

Đối với một tham số được mong đợi là một trong những tập giá trị giới hạn. Chỉ định các trường thuộc loại nào sẽ được sử dụng làm giá trị cho tham số này.

Thật không may, tôi chưa tìm ra cách nó hoạt động. Có thể đó là lỗi trong phiên bản Resharper 9.2 của tôi.

Những gì tôi đã thử cho đến nay:

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

Ngay cả khi bạn làm cho nó hoạt động, bạn sẽ vẫn phải điền vào danh sách Giá trị.

Và tất nhiên, bạn vẫn có thể phát triển phần mở rộng / chú thích mã của mình cho Resharper.

Tại sao không sử dụng một đối tượng được gõ mạnh thay vì chuỗi?

Đôi khi thay vì sử dụng stringint, chúng ta có thể sử dụng các lớp được đánh kiểu mạnh hơn trong thiết kế của riêng mình. Vì có vẻ như bạn kiểm soát mã của mình, bạn có thể thay vì sử dụng stringtên css trong đó, bạn có thể tạo một kiểu mới như CssClass.

Bạn chỉ cần thêm dưới dạng một sự kiện dựng sẵn một lệnh gọi đến trình tạo phân tích cú pháp mọi css trong dự án và tạo động một lớp như vậy:

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

và sau đó mẫu của bạn sẽ giống như vậy:

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

Điều này thật thú vị, nhưng không trả lời được câu hỏi, vì nó sẽ không có tất cả các lớp CSS được ứng dụng sử dụng trên tất cả các tệp CSS của nó.
Raif Atef
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.