Rai*_*tef 118 c# asp.net-mvc resharper intellisense html-helper
[为css类的HTMLHelper属性启用intellisense]
我有这个HTMLhelper:
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
string cssClass)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
我希望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)
{
// ...
}
Run Code Online (Sandbox Code Playgroud)
但这不起作用.如果Resharper能够识别输入的类并且停止在jQuery选择器表达式中操作未知的CSS类(在上面的帮助器生成的文本框上操作),这也将是非常棒的.
编辑: 这是一个智能感知的屏幕截图,它适用于动作方法的"htmlAttributes"参数.这是通过在参数上使用[HtmlElementAttributes]注释来完成的.
我想要一个类似的注释,让我把css类放在一个字符串参数中,并让相同的intellisense出现在css类中.
从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;
}
}
}
Run Code Online (Sandbox Code Playgroud)
即使您使其工作,您仍然需要填充值列表。
当然,您仍然可以为 Resharper 开发代码注释/扩展。
有时,我们可以使用我们自己设计的更强类型的类,而不是使用string
and 。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;
}
}
Run Code Online (Sandbox Code Playgroud)
然后你的样本将如下所示:
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);
}
}
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
2482 次 |
最近记录: |