2010-10-21 19 views
1

Quand je besoin d'utiliser une recherche j'inclure habituellement la propriété ID dans la classe de modèle de vue pour que je puisse l'utiliser de cette façon dans la vue correspondanteComment gérer les recherches?

<%= Html.LabelFor(model => model.LookupTableID)%> 
<br /> 
<%= Html.DropDownListFor(model => model.LookupTableID, Model.LookuptableList, new {}) %> 

ayant Model.LookuptableList comme une propriété dans le modèle lui-même comme ceci:

public IEnumerable<SelectListItem> LookuptableList { 
    get { 
     return GetLookuptableList().Select(
      t => new SelectListItem { Text = t.Description, Value = t.LookupTableID.ToString() }); 
    } 
} 

Mais je ne suis pas sûr que ce soit une bonne façon de gérer cela à cause de la fonction GetLookuptableList() dans la classe de modèle de vue.

Y a-t-il une meilleure façon de le faire?

+0

Eh bien, qu'est-ce que 'GetLookuptableList()' alors? Pourquoi pensez-vous qu'il est problématique que cette méthode soit dans le modèle? –

+0

Cette fonction récupère la liste de recherche du magasin sous-jacent. Je ne pense pas que ce soit problématique. Je pense juste que cela ne devrait pas être là. Rester dans le modèle ne suit pas correctement la séparation des préoccupations .... – Lorenzo

+1

Oui, Lorenzo. Je pense que l'accès au magasin sous-jacent à partir du modèle de vue Couche de présentation pourrait être remplacé par un membre IEnumerable rempli au niveau du contrôleur Couche d'application. donc votre viewModel pourrait rester agnostique à partir de l'accès au magasin sous-jacent – SDReyes

Répondre

1

Vous incluez la table de consultation complète avec chaque instance du modèle de vue. Un peu exagéré. Je crée généralement une classe d'utilitaire statique avec la table de recherche qui renvoie le SelectListItem.