[为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(字符串名称)] 。 我试着像这样申请cssClass参数:
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
[HtmlAttributeValue("class")] string cssClass)
{
// ...
}
但这不起作用。如果Resharper能够识别输入的类并且停止在jQuery选择器表达式中对未知的CSS类(在上面的帮助器生成的文本框上进行操作)上烦恼,那么它也会非常棒。
修改 这是一个intellisense的截图,它适用于action方法的“htmlAttributes”参数。这是通过在参数上使用[HtmlElementAttributes]注释来实现的。
我想要一个类似的注释,它允许我将css类放在一个字符串参数中,并使用相同的intellisense显示css类。
答案 0 :(得分:3)
从Resharper 10目前支持的Code Annotations,最佳候选人将使用此属性。从以上链接:
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);
}
}