2010-05-28 9 views
2

Je ne sais pas vraiment où chercher une erreur ... la situation: J'ai une vue ASPX qui contient un formulaire et quelques entrées, et quand je clique sur le bouton soumettre tout est POSTé à l'une de mes actions ASP.NET MVC.ASP.NET MVC 2 - ViewData vide après POST

Lorsque je définis un point d'arrêt, il est frappé correctement. Lorsque j'utilise FireBug pour voir ce qui est envoyé à l'action, je vois correctement data1 = abc & data2 = quelque chose & data3 = 1234.

Cependant, rien n'arrive dans ma méthode d'action. ViewData est vide, il n'y a pas de ViewData ["data1"] ou autre chose qui montrerait que les données sont arrivées.

Comment cela peut-il être? Où puis-je commencer à chercher l'erreur?

+0

data1 = WRT abc & données2 = ... qu'est-ce que t La signature de méthode pour votre méthode d'action ressemble-t-elle? –

+0

Aucun paramètre. ViewData ["data1"] devrait pouvoir accéder à la valeur. Mais c'est null, même si FireBug montre que la valeur a été soumise. – Alex

+0

Qu'espérez-vous trouver dans ViewData dans une publication? Il est utilisé pour que le contrôleur envoie des données à la vue et non l'inverse. Regardez dans Request ["data1"] 'ou mieux encore dans les paramètres de l'action du contrôleur. –

Répondre

8

ViewData est pertinent lorsque vous passez du contrôleur à la vue. Il ne sera pas publié.

vous aurez besoin de votre méthode d'action pour ressembler à quelque chose comme

public ActionResult DoSomething(string data1, string data2, int data3) { ... 

Ensuite, le (paramètre modèle?) Contraignant devrait prendre soin des choses pour vous

+0

... Exactement :-) –

1

Essayez de modifier votre action à accepter FormCollection:

public ActionResult DoSomething(FormCollection fc) 
{ 
    System.Diagnostics.Debug.Writeline(fc["data1"]); 
} 
0

Si vous souhaitez voir ce qui est publié dans votre vue, acceptez FormCollection en tant que paramètre ou liez directement vos éléments de formulaire à un modèle. Comme ceci:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult PostToThisView(FormCollection formItems) 
{ 
    var data1 = formItems["data1"]; 
    return View(); 
} 

En outre, see this question.

0

essayez ceci:

Request["data1"] 

ou

Request.Form["data1"] 

ou

[HttpPost] 
public ActionResult YourPostAction(object data1) 

ou

[HttpPost] 
public ActionResult YourPostAction(ACLassThatHasData1Prop viewmodel) 
//your view doesn't has to be strongly typed to the type of the parameter in this case 
+0

En ce qui concerne le dernier exemple, le modèle utilisé pour le paramètre ne doit pas nécessairement être le même que celui qui est fortement typé à la vue d'où provient la requête. Le classeur modèle prendra simplement les valeurs stockées dans la collection de formulaires (ou la chaîne de requête si la requête est un GET) et essaiera de les utiliser pour remplir tout type d'objet spécifié comme paramètre. –

+0

@Dr. Wily's Apprentice, merci de m'avoir dit que – Omu