Question

Je suis désireux de créer une page qui permet aux utilisateurs de choisir la façon dont ils aimeraient voir leurs données - résumé (c.-à-qui supports de regroupement), la grille (qui soutient le regroupement), table (qui soutient le regroupement), carte, ligne de temps, xml, etc JSON.

Maintenant, chaque mise en page aurait probablement différente l'utilisation d'un modèle de vue différent, qui hérite d'un modèle classe de base commune / vue. La raison étant que chaque mise en page a besoin de la structure de l'objet qu'il traite d'être différent (certains ont besoin d'autres hiérarchiques une structure de plate).

Chaque agencement exigerait la même méthode référentiel et chaque agencement appuierait la même fonctionnalité, à savoir la recherche et le filtrage (d'où ces contrôles seraient partagés entre les dispositions). La principale exception à cette règle serait le tri qui grille seulement et des vues table doit soutenir.

Maintenant, ma question est donnée ce que les gens pensent est la meilleure approche.

  • Utilisation DisplayFor pour gérer le rendu des différents types?
  • Aussi comment puis-je travailler cela avec les actions ... Je suppose que j'utiliser une action et passer dans les types de mise en page, mais comment ce soutien le groupement requis pour le résumé, la grille et des vues de table .
  • Est-ce que je traite chaque groupe comme un simple type de mise en page
  • Aussi comment cela fonctionnerait d'un point de vue d'URL - ce que les gens pensent est le modèle pour soutenir cette fonctionnalité de mise en page

Vive Anthony

Était-ce utile?

La solution

Conceptuellement, la vue est la partie d'une application Web MVC qui est responsable de la gestion l'affichage des données. Donc, si vous souhaitez afficher des données de différentes manières, il semble plus logique que chaque « affichage » a son propre ASPX Voir correspondant.

Tous les modèles Voir peut hériter du même modèle de base. Ainsi, par exemple, nous pourrions avoir quatre modèles et trois vues:

public abstract class BaseViewModel {}
public class GridViewModel : BaseViewModel {}
public class TableViewModel : BaseViewModel {}
public class SummaryViewModel : BaseViewModel {}

GridViewPage<GridViewModel>
TableViewPage<TableViewModel>
SummaryViewPage<SummaryViewModel>

Chacun des vues peut avoir différents stylehsheets et fichiers javascript attachés, de sorte que vous devriez être en mesure d'utiliser DisplayFor si vous le souhaitez, ou vous pouvez créer la mise en page à la main.

En ce qui concerne le contrôleur, vous pouvez créer une méthode d'action qui renvoie tous les trois des points de vue, ou vous pouvez créer trois ActionResults distinctes, une pour chaque vue. Voici le ActionResult "monolithique":

public ActionResult PageViewResult(string pageType)
{
    switch (pageType)
    {
        //define your cases, return your views and your models
        //make sure to set a default
    }
}

Vous pouvez formater les routes comme bon vous semble. Par exemple, avec ce qui précède « monolithique » ActionResult, nous pourrions créer la route suivante dans notre fichier Global.asax:

    routes.MapRoute(
        "FormattedViewPage", // Route name
        "View/Page/{pageType}", // URL with parameters
        new { controller = "ViewPageController", action = "PageViewResult", pageType = "grid" } // Parameter defaults
    );

Hope this helps. Laissez-moi savoir si vous avez des questions.

Autres conseils

D'abord, si ce sont les mêmes données, alors je voudrais essayer d'utiliser le même modèle pour tous les points de vue, mais soit utiliser différentes pages / contrôles ASPX css ou différentes pour rendre le modèle en fonction de la façon dont l'utilisateur souhaite afficher les données.

Aussi, vous voudrez peut-être examiner à quel point cela peut être fait en JavaScript, tout dépend de la richesse que vous voulez que l'expérience utilisateur soit.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top