[css 클래스의 HTMLHelper 속성에 intellisense 사용]
이 HTMLhelper가 있습니다.
public IHtmlString MyTextBoxFor<TModel, TProperty>(
this HtmlHelper<TModel> html,
Expression<Func<TModel, TProperty>> propertyExpression,
string cssClass)
{
// ...
}
“cssClass”매개 변수의 값을 전달할 때 Resharper가 내 애플리케이션에 정의 된 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] 주석을 사용하여 수행됩니다.
CSS 클래스를 문자열 매개 변수에 넣고 CSS 클래스를 표시하는 동일한 인텔리전스가 나타나는 유사한 주석을 원합니다.
답변
[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;
}
}
}
제대로 작동하더라도 값 목록을 채워야합니다.
물론 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);
}
}