2017-07-13 1 views
0

Dans ma demande, j'ai une classe abstraite pour obtenir des phrases multilingues.obtenir la référence de la méthode de classe abstraite dans le contrôleur

Cela fonctionne très bien dans toutes mes vues, mais maintenant j'ai aussi besoin de cette méthode pour mes contrôleurs.

Voici le code de cette classe abstraite.

public abstract class SurveyViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public string Phrases(string Phrase) 
    { 
     List<MultilanguagePhrasesVM> List_Multilanguage = StaticCacheLocaleStringResource.CheckForCachedPhrases(); 
     var PhraseValue = List_Multilanguage.Where(m => m.LanguagePhrase == Phrase).FirstOrDefault(); 

     if (PhraseValue == null) 
     { 
      return Phrase; 
     } 
     else 
     { 
      return PhraseValue.LanguagePhrase_Value; 
     } 
    } 
} 

Ce que je veux?

Je veux accéder à cette méthode phrases() dans mes contrôleurs aussi.

J'ai essayé plusieurs façons d'y parvenir, mais aucune d'entre elles n'a été travaillée de manière significative.

Quelqu'un peut-il s'il vous plaît aidez-moi avec ça?

+0

Déplacez ce code dans une classe partagée que vous pouvez instancier ou rendre statique. – DavidG

+0

Cela ressemble à un mauvais design. Déplacez Pharses vers une autre classe d'aide. – BWA

+0

@DavidG \t Dans un premier temps je pense de cette façon, mais n'est pas là que je peux obtenir même fonctionnalité que en ce moment j'accède dans les vues, comme une System.Web.Mvc.WebViewPage classe Bharat

Répondre

1

Yo peut redessiner le code dans ce chemin:

public abstract class SurveyViewPage<TModel> : System.Web.Mvc.WebViewPage<TModel> 
{ 
    public string Phrases(string Phrase) 
    { 
     return SomeHelper.Phrases(Phrase); 
    } 
} 

public static class SomeHelper 
{ 
    public static string Phrases(string Phrase) 
    { 
     List<MultilanguagePhrasesVM> List_Multilanguage = StaticCacheLocaleStringResource.CheckForCachedPhrases(); 
     var PhraseValue = List_Multilanguage.Where(m => m.LanguagePhrase == Phrase).FirstOrDefault(); 

     if (PhraseValue == null) 
     { 
      return Phrase; 
     } 
     else 
     { 
      return PhraseValue.LanguagePhrase_Value; 
     } 
    } 
} 

Et utiliser SomeHelper dans les contrôleurs.

+0

wow, c'est une grande aide pour réduire le code .. Merci BWA – Bharat

1

Pour pouvoir y accéder depuis un contrôleur, vous devez déplacer la méthode vers une autre classe. Comme une approche facile, vous pouvez créer une classe d'aide statique et mettre en œuvre la méthode comme une méthode statique, de sorte que vous pouvez y accéder ainsi à la fois le contrôleur et votre point de vue:

MyStaticClass.Phrases("phrase") 
+0

Dans un premier temps je pense à ce manière, mais n'est pas là que je peux réaliser la même fonctionnalité que maintenant j'accède dans les vues, comme une classe System.Web.Mvc.WebViewPage .. – Bharat

+0

Bien sûr, vous pouvez simplement rendre la méthode statique dans la classe abstraite, mais par rapport à une classe d'assistance spéciale, cela crée une connexion entre le contrôleur et les vues qui n'est pas évidente. Je préférerais la classe d'aide statique. – Markus

+0

ok, a obtenu votre point .. merci – Bharat