Question

La première fois après,

J'ai joué avec MVC abit ... J'ai une vue qui a plusieurs champs d'entrée, certains de ces champs peuvent être vides sur le poteau.

La méthode d'action à l'intérieur du contrôleur pour le poste ressemble à ceci

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)

Je me sers de l'extension DynamicQuery qui a été kicking autour afin d'effectuer querys Linq dynamiques sur ma base de données et j'ai encapsulé cela dans un objet de recherche qui est passé à la couche d'accès aux données pour execusion.

Cependant, j'ai aussi un objet ViewData personnalisé qui est repassée à la vue pour afficher les valeurs d'entrée et les résultats de la requête.

Tout semble un peu méchant dans le code que je vais avoir à régler les deux propriétés de l'objet de recherche et les ViewDatas.

public ActionResult Filter(int? id, string firstName, string lastName, bool? isMember)  { 
var search = new Search { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember 
}; 

var memberViewData = new MemberViewData { 
Id = id, 
FirstName = firstName, 
LastName = lastName, 
Member =  isMember
}; 

memberViewData.Results = _dataRepository.GetMember(search); 

return View("Search", memberViewData); 

}

Suis-je plus penser cela et devrait vraiment juste transmettre les valeurs à la couche d'accès aux données et alimenter le ViewData dans le contrôleur, ou est-il beaucoup plus élégant motif ou la pratique que je pourrais utiliser?

Désolé si cela semble décharge, pas attribuer de personnes pour échanger des idées et de temps pour creuser dans le cadre.

Était-ce utile?

La solution

Selon votre classe extrait MemberViewData a la propriété Résultats en plus des propriétés de la classe de recherche. Donc, la première étape serait de faire MemberViewData découlent de la recherche et de définir un constructeur qui accepte par exemple de recherche en tant que paramètre et affecte ses propriétés de base de celui-ci. Ensuite, je voudrais changer la méthode d'action comme ceci:

public ActionResult Filter(Search search)  
{ 
    return View("Search", new MemberViewData(search) 
    {
        Results = _dataRepository.GetMember(search)
    }); 
}

Autres conseils

Utilisez ModelBinder pour lier des données

Comme mentionné Tadeusz, un ModelBinder peut aider à construire le MemberViewData pour vous, ce qui laisserait seulement les résultats à extraire.

Vous pouvez également décider de la création d'un service de présentation qui comprend comment construire ce point de vue objet de données et simplement déléguer. Je préfère l'approche liant le modèle ici bien.

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