gpt4 book ai didi

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

转载 作者:IT王子 更新时间:2023-10-29 03:33:59 25 4
gpt4 key购买 nike

[在 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 intellisense

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

最佳答案

使用[ValueProvider]

来自Code Annotations目前由 Resharper 10 支持,最好的候选者将使用此属性。从上面的链接:

ValueProviderAttribute

For a parameter that is expected to be one of the limited set of values. Specify fields of which type should be used as values for this parameter.

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

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

有时我们可以使用自己设计的更强类型的类,而不是使用 stringint。由于您似乎可以控制您的代码,因此您可以创建一个新类型,如 CssClass,而不是使用 string 和其中的 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);
}
}

关于c# - 您如何告诉 Resharper 方法参数是包含 CSS 类的字符串?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19449089/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com