2010-09-21 1 views
0

Le code actuel de l'une des vues de mon projet est grand et monolithique et je veux juste l'organiser. Est-il juste de placer des méthodes dans ma vue ASP.NET MVC?Est-il applicable pour placer des méthodes dans des vues ASP.NET MVC?

+2

Je pense que c'est définitivement NON. Mais je suggérerais que vous nous donniez un exemple de type de méthodes que vous écrivez, et nous pourrons ensuite vous donner quelques alternatives. –

Répondre

4

Je dirais certainement pas. Le but de MVC est de séparer les préoccupations, à savoir Model - View - Controller. Dans votre cas, vous mélangez la logique Model/Controller avec votre View.

Si vous avez besoin de passer un contenu complexe à votre vue, vous devez créer des classes personnalisées ViewData, les remplir dans votre contrôleur et les transmettre dans votre vue. Si vos méthodes sont plus liées à la génération du balisage View, vous devriez envisager de le diviser en vues partielles ou comme déjà suggéré en utilisant des méthodes d'extension d'aide.

1

C'est possible mais si vous avez besoin de méthodes dans une vue, vous devriez peut-être envisager d'étendre l'objet Html avec une méthode d'extension, puis utiliser ces méthodes depuis l'intérieur de la vue. J'aime séparer mes extensions par fonctionnalité pour garder la vue lisible. Par exemple:

public static MySpecialDateHelper SpecialDateHelper(this HtmlHelper helper) 
{ 
    return new MySpecialDateHelper(helper); 
} 


public class MySpecialDateHelper 
{ 
    // Fields 
    private HtmlHelper m_helper; 
    private StringBuilder m_sb = new StringBuilder(); 

    // Methods 
    internal MySpecialDateHelper(HtmlHelper helper) 
    { 
     this.m_helper = helper; 
    } 

     // Print date prettily 
     public public string PrettyDate(datetime target) 
    { 
     // format however 
     return string.format("pretty {0}", target.ToString()); 
    } 

    // Print date prettily 
     public public string PrettyDateInATextbox(datetime target) 
    { 
     return m_helper.TextBox("prettyid",PrettyDate(target)); 
    } 

    // etc... 
} 

Alors à votre avis, il vous suffit de faire référence à l'extension que vous venez de créer

<%= Html.SpecialDateHelper.PrettyDateInATextbox(Now); %> 

Bien sûr, votre séparation des méthodes dans les extensions peuvent varier, vous pouvez également étendre la Objet HtmlHelper avec les méthodes directement, mais je préfère cette méthode

1

No.

Move it le contrôleur, le cas échéant introduire des modèles de vue. Après cela, définissez vos propres helpers Html, en considérant que ceux-ci devraient être pour des trucs comme HTML, pas pour n'importe quelle logique.

Vous pourriez avoir quelque chose dans une vue qui lui est spécifique, et il n'est simplement pas possible qu'un morceau de code fasse quoi que ce soit en dehors de cela. Mais même alors, vous pouvez simplement le définir dans une aide, tant que le nom est très clair sur ce qu'il fait, vous êtes mieux que de le mettre dans la vue. Vous pouvez mettre à l'essai des aides test, il y a donc un net avantage à le faire.

Questions connexes