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

118

[启用HTMLHelper属性上的智能感知以便设置css类]

我有一个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 intellisense

我想要一个类似的注释,让我将css类放入字符串参数中,并显示相同的智能提示来展示css类。


10
在ReSharper的错误跟踪器上开了一个问题:http://youtrack.jetbrains.com/issue/RSRP-389238。 - Raif Atef
4
好问题,我也想知道答案。 - Murtaza Munshi
2
@RaifAtef,ReSharper中已经存在这个功能了吗?您能添加一张截图来说明您所说的内容吗?只是为了确保您不是在谈论https://dev59.com/LnRB5IYBdhLWcg3wvpmc。 - Seabizkit
3
@RaifAtef,好的……问题是,我显然有ReSharper但无法看到你所说的ReSharper的哪个功能……我只能看到普通的内置智能提示……我真的很感兴趣,也许我错过了一些ReSharper的魔力,但我看不到它。你能否请发布一张截图,让我知道我应该看到什么。我尝试了使用"Html.Action("和"Html.MyCustomStuff"但在两者之间没有看到任何区别。我使用的是ReSharper 9.1.3,这是最新版本之一。 - Seabizkit
2
@Seabizkit 我已经通过屏幕截图编辑了这个问题。 - Raif Atef
显示剩余2条评论
1个回答

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

即使您让它工作了,仍然需要填充“Values”列表。
当然,您仍然可以为Resharper开发您的代码注释/扩展。
为什么不使用强类型对象,而不是字符串?
有时,我们可以使用自己设计的更强类型的类,而不是使用字符串和整数。由于看起来您控制着代码,因此您可以使用像“CssClass”这样的新类型,而不是在其中使用css名称的字符串。
您只需要将调用生成器的预构建事件添加为解析项目中的每个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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接