2010-07-02 8 views
0

Donc, comme le titre le dit, j'ai créé un modèle de vue dans mon application asp.net mvc, donc il serait fortement typé mon avis. Mon modèle de vue est une combinaison de deux de mes classes de modèles. Maintenant, lorsque l'utilisateur appuie sur le bouton de sauvegarde sur cette vue, il va à un contrôleur. Comment sait-il quel contrôleur aller? J'ai construit mon contrôleur 1 - 1 pour ainsi dire avec mes modèles et vues donc le contrôleur A connaît le modèle A et le contrôleur B connaît le modèle B. Mais si j'ai un modèle de vue qui est AB comment sait-il sur subit pour aller à A ou B. Ai-je besoin d'un contrôleur appelé AB Controller?J'ai un ViewModel fortement lié à ma vue dans mon application ASP.NET MVC, et maintenant au contrôleur

+0

Le contrôleur sélectionné dépend de l'itinéraire correspondant dans la collection d'itinéraires. Jetez un coup d'œil à la [Présentation du routage ASP.NET MVC] (http://www.asp.net/mvc/tutorials/asp-net-mvc-routing-overview-cs). – R0MANARMY

Répondre

0

Le contrôleur et l'action invoqués ne dépendent pas de l'objet viewmodel que vous avez utilisé pour lier la page lors du rendu de la vue initiale. Le contrôleur (et l'action) appelé est déterminé par l'URL de la demande envoyée. (L'une des routes que vous avez définies correspondra à la chaîne d'URL de la requête ou une erreur 404 non trouvée sera renvoyée.)

Un bouton de soumission dans un formulaire HTML (généralement un POST) aura une action attribut qui détermine sa cible url, un tag d'ancrage aura un href, etc.

Dans votre situation où vous avez un objet viewmodel personnalisé, vous pouvez définir une action à attendre et tenter d'analyser ce type spécifique d'objet en spécifiant en tant que paramètre de votre action:

public ActionResult SaveSystemSetting(SystemAdminVM item) { 
0

Une méthode d'action ne reçoit pas de modèle. Il reçoit des paramètres.

Quoi qu'il en soit, je pense que je sais d'où vous venez: Un des paramètres de votre action a le type de ViewModel utilisé dans la vue. C'est une disposition commune et cela a beaucoup de sens. Dans de nombreux projets, il est si largement utilisé que, après quelque temps, vous commencez à penser qu'une action reçoit réellement un modèle. Il suffit de rappeler que les paramètres de votre action peuvent par tout ce qui peut être rempli par le ModelBinder. Vous pouvez passer les deux modèles en tant que paramètres, vous pouvez passer un ViewModel qui agrège les modèles a et b ou vous pouvez passer un ViewModel qui a les propriétés de a + b. L'agrégation est l'approche la plus courante.

0

Généralement, nous surchargeons nos méthodes d'action dans le contrôleur, donc si vous avez une action appelée edit qui rend la vue avec votre objet viewmodel, vous aurez une méthode d'édition surchargée avec le HttpPost spécifié pour cette méthode.

Les données de cette méthode seront transmises en tant que valeurs de collection de valeurs de formulaire ou vous pouvez les lier à votre objet viewmodel si vous le souhaitez et les traiter davantage.