Resharper'a bir yöntem parametresinin bir CSS sınıfı içeren bir dize olduğunu nasıl söylersiniz?


118

[CSS sınıfları için HTMLHelper özniteliğinde intellisense'i etkinleştirin]

Bu HTML yardımcım var:

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

Resharper'ın "cssClass" parametresinin değerini iletirken uygulamamda tanımlanan CSS sınıfları için IntelliSense vermesini istiyorum.

Resharper'ın tanıdığı bazı kod ek açıklama nitelikleri vardır, ancak hiçbiri bir yöntem parametresini CSS sınıfları olarak işaretlemekle doğrudan ilgili görünmemektedir.

Bulabildiğim en yakın [HtmlAttributeValue (dize adı)] idi . CssClass parametresine şu şekilde uygulamayı denedim:

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

Ama bu işe yaramıyor. Ayrıca, Resharper'ın girilen sınıfı tanıması ve jQuery seçici ifadelerindeki (yukarıdaki yardımcı tarafından oluşturulan metin kutusunda çalışan) bilinmeyen CSS sınıfları hakkında beni rahatsız etmeyi bırakması da harika olurdu.

Düzenleme: İşte bir eylem yönteminin "htmlAttributes" parametresi için çalışan zeka türünün bir ekran görüntüsü. Bu, parametre üzerindeki [HtmlElementAttributes] ek açıklaması kullanılarak gerçekleştirilir.

Resharper htmlAttributes intellisense

Css sınıflarını bir string parametresine koymama ve css sınıflarını gösteren aynı intellisense görünmesine izin veren benzer bir açıklama istiyorum.


10
ReSharper hata izleyicisinde
Raif Atef

4
Güzel Soru, yanıtı da bilmek istiyorum.
Murtaza Munshi

2
@RaifAtef bu zaten ReSharper'da mevcut, bahsettiğiniz şeyin ekran görüntüsünü ekleyebilir misiniz ve sadece stackoverflow.com/questions/529677/…
Seabizkit

2
@Seabizkit, "dönüş Görünümü (" yazarken aldığınız intellisense'e benzer ve görünüm adlarıyla birlikte intellisense alırsınız veya "Html.Action" ("Html.Action") 'ı çağırırsınız ve denetleyici ve eylem adı için intellisense alırsınız. Sadece cssClass parametresinin değerini girerken resharper'ın bana CSS sınıflarını göstermesini sağlamak istiyorum. DÜZENLEME: Hayır benim sorum sizinkinden farklı. Sizinki yerleşik bir VS şey, benimki kesinlikle yeniden paylaşımla ilgili.
Raif Atef

3
@RaifAtef, Tamam .. sorun şu ki, ReSharper'a sahibim ama ReSharper'ın hangi özelliğinden bahsettiğinizi göremiyorum ... Sadece normal yerleşik intellisense görüyorum ... Belki de olduğum için gerçekten ilgileniyorum bazı ReSharper sihrini kaçırdım, ancak göremiyorum. Lütfen görmem gereken şeyin bir ekran görüntüsünü gönderir misiniz? "Html.Action (" ve "Html.MyCustomStuff" ile denedim, ikisi arasında herhangi bir fark görmedim. En
sonunculardan

Yanıtlar:


3

[ValueProvider] kullanın

Gönderen Kod Açıklamalar anda Resharper 10 tarafından desteklenen, en iyi aday bu özellik kullanmak istiyorsunuz. Yukarıdaki bağlantıdan:

ValueProviderAttribute

Sınırlı değerler kümesinden biri olması beklenen bir parametre için. Bu parametre için değer olarak kullanılması gereken türdeki alanları belirtin.

Ne yazık ki nasıl çalıştığını çözemedim. Belki de Resharper sürüm 9.2'de hatalı.

Şimdiye kadar denediklerim:

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

Çalışmasını sağlasanız bile, yine de Değerler listesini doldurmanız gerekir.

Ve elbette, Resharper için kod ek açıklamanızı / uzantınızı geliştirmeye devam edebilirsiniz.

Neden dizge yerine güçlü yazılmış bir nesne kullanmıyorsunuz?

Kullanmak yerine Bazen stringve int, kendi tasarımın güçlü-daktilo sınıfları kullanabilirsiniz. Görünüşe göre kodunuzu kontrol ediyorsunuz, stringiçinde bir css adı kullanmak yerine, gibi yeni bir tür oluşturabilirsiniz CssClass.

Önceden oluşturulmuş bir olay olarak, projedeki her css'i ayrıştıran ve dinamik olarak böyle bir sınıf oluşturan bir oluşturucu çağrısı eklemeniz yeterlidir:

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

ve sonra örneğiniz şöyle görünecek:

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

Bu ilginç, ancak soruya cevap vermiyor çünkü uygulama tarafından tüm CSS dosyalarında kullanılan tüm CSS sınıflarına sahip olmayacak.
Raif Atef
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.