2010-03-26 6 views
4

Je regardais le HaHaa presentation on ASP.NET MVC from MIX et ils ont mentionné l'utilisation d'un modèle de post où je suppose qu'ils disaient que vous pourriez utiliser un modèle qui était seulement pour l'affichage. J'ai essayé de chercher des exemples pour cela. Est-ce que je ne comprends pas ce qu'ils disent? Quelqu'un at-il un exemple de comment cela pourrait fonctionner dans une vue fortement typée où le modèle de vue et le modèle de publication ne sont pas du même type?Exemple d'un modèle de post ASP.NET MVC?

+1

@TimAbell Lien fixe. –

Répondre

8

Ci-dessous, l'exemple de ScottGu est un peu développé. Comme l'a expliqué @SLaks, lorsque le POST est reçu, MVC va essayer de créer un nouvel objet MyPostName et de faire correspondre ses propriétés avec les champs from. Il mettra également à jour la propriété ModelState avec les résultats de la correspondance et de la validation. Lorsque l'action renvoie la vue, elle doit également fournir un modèle pour celle-ci. Cependant, la vue ne doit pas utiliser ce même modèle. En fait, la vue peut être fortement typée avec un modèle différent, qui contient les données étendues, par exemple il peut avoir des propriétés de navigation liées à des clés externes dans la table DB; et si c'est le cas, la logique à mapper du modèle POST au modèle de vue sera contenue dans l'action POST.

public class MyGetModel 
{ 
    string FullName; 
    List<MyGetModel> SuggestedFriends; 
} 

public class MyPostModel 
{ 
    string FirstName; 
    string LastName; 
} 

//GET: /Customer/Create 
public ActionResult Create() 
{ 
    MyGetModel myName = new MyGetModel(); 
    myName.FullName = "John Doe"; // Or fetch it from the DB 
    myName.SuggestedFriends = new List<MyGetModel>; // For example - from people select name where name != myName.FullName 
    Model = myName; 
    return View(); 
} 

//POST: /Customer/Create 
[HttpPost] 
public ActionResult Create(MyPostModel newName) 
{ 
    MyGetModel name = new MyGetModel(); 
    name.FullName = newName.FirstName + "" + newName.LastName; // Or validate and update the DB 
    return View("Create", name); 
} 
+1

Qu'est-ce que «ActionModel»? – Omar

+0

Mon erreur, ça aurait dû être ActionResult. –

+0

Bon, ça a du sens maintenant. Il n'y a aucune raison pour que les Actions connaissent le type de N'IMPORTE QUOI qui leur est envoyé, sauf par le biais d'une tentative par le framework de mapper des entrées aux propriétés du modèle répertorié dans le (s) paramètre (s) de l'Action. –

2

Le modèle POST ne sera utilisé que pour transmettre les données à votre méthode d'action.

Le modèle que l'action POST envoie à sa vue n'a pas besoin d'être lié au modèle qu'il a reçu (et ne le sera généralement pas). De même, le modèle que l'action GET initiale (qui montre le formulaire en premier lieu) passe à sa vue (qui soumet à l'action POST) n'a pas besoin d'être lié au modèle que l'action POST prend (bien que ce sera généralement le même modèle)

Tant qu'il a des propriétés qui correspondent à vos paramètres d'entrée, vous pouvez utiliser n'importe quel modèle pour le paramètre pour l'action POST.