您如何告诉Resharper方法参数是包含CSS类的字符串?


118

[在CSS类的HTMLHelper属性上启用智能感知]

我有这个HTMLhelper:

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

我希望Resharper在传递“ cssClass”参数的值时为我提供在应用程序中定义的CSS类的IntelliSense。

Resharper可以识别一些代码注释属性,但是似乎没有一个与将方法参数标记为CSS类直接相关。

我能找到的最接近的是[HtmlAttributeValue(string name)]。我试图这样申请cssClass参数:

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

但这是行不通的。如果Resharper能够识别输入的类并停止在jQuery选择器表达式(在上面的帮助程序生成的文本框上运行)中未知的CSS类困扰我,这也将非常棒。

编辑: 这是适用于操作方法的“ htmlAttributes”参数的智能感知类型的屏幕截图。这可以通过在参数上使用[HtmlElementAttributes]批注来完成。

Resharper htmlAttributes智能感知

我想要一个类似的注释,使我可以将css类放在字符串参数中,并具有相同的智能感知来显示css类。


10
在ReSharper bugtracker
Raif Atef

4
好的问题,我也想知道答案。
Murtaza Munshi

2
@RaifAtef这是否已经存在于ReSharper的,您可以加入你谈论的屏幕截图,只是为了确保你不是在谈论stackoverflow.com/questions/529677/...
Seabizkit

2
@Seabizkit它类似于您在编写“ return View()”时获得的智能感知,并在视图名称中获得智能感知,或者在您调用“ Html.Action(”时获得控制器和操作名称智能感知。我只想让ReSharper的演出我的CSS类,当我进入了CssClass属性参数值编辑:没有,我的问题是从你的不同影响你的是一个内置的VS的事情,我的是严格的ReSharper相关。
RAIF阿提夫

3
@RaifAtef,好吧..问题是,我显然拥有ReSharper,但看不到您在谈论ReSharper的功能 ...我只是看到了普通的内置智能感知...我真的很感兴趣,也许我错过了一些ReSharper魔术,但我看不到。您能张贴我应该看到的屏幕截图吗?我试着用“Html.Action(”和“Html.MyCustomStuff”看不出这两者之间有什么区别使用ReSharper的9.1.3这就好比是最新一个。
Seabizkit

Answers:


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开发代码注释/扩展。

为什么不使用强类型对象而不是字符串?

有时,我们可以使用自己设计的更强类型的类来代替使用stringand int。由于似乎您可以控制代码,因此可以代替在其中使用stringCSS名称来创建新类型,例如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
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.