你如何告诉Resharper一个方法参数是一个包含CSS类的string?

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

我有这个HTMLhelper:

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

我希望Resharper在为“cssClass”parameter passing值时为我提供在我的应用程序中定义的IntelliSense for CSS类。

有一些代码注释属性Resharper识别,但似乎没有直接关系到将方法参数标记为CSS类。

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

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

但是这不起作用。 如果Resharper能识别input的类,并停止在jQueryselect器expression式(对上面的帮助器生成的文本框进行操作)中关于未知的CSS类的问题,那也是非常棒的。

编辑:这里是一个工作方式的“htmlAttributes”参数的智能感知types的屏幕截图。 这是通过在参数上使用[HtmlElementAttributes]注释来完成的。

resharper htmlAttributes intellisense

我想要一个类似的注释,让我把CSS类放在一个string参数,并有相同的智能感知显示CSS类。

使用[ValueProvider]

从Resharper 10当前支持的代码注释中 ,最好的候选者将使用这个属性。 从上面的链接:

ValueProviderAttribute

对于预期为有限的一组值的参数。 指定应将哪个types的字段用作此参数的值。

不幸的是,我还没有弄清楚它是如何工作的。 也许这是我的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开发代码注释/扩展。

为什么不使用强types对象而不是string?

有时候不用stringint ,我们可以使用我们自己devise的更强types的类。 由于看起来你可以控制你的代码,所以你可以不使用带有css名字的string ,而是创build一个像CssClass这样的新types。

你只需要添加一个预编译的事件调用一个生成器来parsing项目中的每一个CSS,并dynamic地创build一个类:

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