2010-07-25 5 views
0

Quelle est la meilleure façon d'obtenir et de poster différents modèles avec une seule vue. Par exemple, j'ai un ensemble de contrôles chaque contrôle a son propre modèle. Je veux les charger dans une vue en fonction des conditions. Et puis sur post, je veux récupérer les valeurs de cette vue.MVC une vue et différents modèles

Quelle est la meilleure pratique pour cela?

Répondre

0

Créez un modèle de vue composite qui expose chaque modèle individuel en tant que propriété.

+0

Très intéressant. Des exemples? – Juk

+0

oui voir mon exemple (je l'ai appelé artificiel mais composite pourrait être un meilleur nom) – jao

+0

@Jao Je l'ai eu. Un seul modèle où les propriétés représentaient tous mes modèles partiels que je veux afficher sur cette vue. Merci! – Juk

1

Hey, si je comprends bien votre question, voici ce que je ferais:

Créer des vues partielles pour les différents modèles que vous avez besoin afin de pouvoir les appeler de la vue « principale ». Ensuite, passer les modèles dans le ViewData et chaque fois que vous devez rendre une partie procédez comme suit:

<%Html.RenderPartial("PartialViewName", ViewData["Model"]);%> 
+0

Oui, je fais déjà comme ça. Mais alors pour obtenir les données de l'un de ces partiels je dois avoir une action associée qui n'accepte qu'un modèle particulier (modèle associé à courant partiel sur la vue). Dans ce cas, si j'ai N partiels, je dois créer N actions HttpPost. On dirait que c'est un peu encombrant. – Juk

+1

C'est vrai, mais, à mon avis, vous conserverez la séparation de vos modèles. Donc, chaque modèle est associé à son résultat d'action. Vous pouvez réutiliser les modèles et les résultats de l'action. Dans le cas du modèle composite, vous devrez toujours faire cela pour préserver la séparation, mais vous présenterez un objet artificiel – sTodorov

3

créer un modèle artificiel comme celui-ci:

public class CustomerViewData { 
    public Customer customer { get; set; } 
    public Ticket ticket { get; set; } 
    public Decimal price { get; set; } 
} 

Dans votre contrôleur, vous appelez CustomerViewData et remplissez-le avec les données dont vous avez besoin:

CustomerViewData.Customer = _customerRepository.GetCustomerById(1); 

Ensuite, vous transmettez le CustomerViewData à votre vue. À votre avis vous ajoutez

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<MyNamespace.Models.CustomerViewData>" %> 

Maintenant, vous pouvez appeler <%= Model.Customer.Name %> pour afficher le nom du client (étant donné que votre objet client a une propriété Name).

(ce qui précède est juste un exemple, le contenu réel peut bien sûr être beaucoup plus logique).

Questions connexes