2009-07-30 4 views
2

Je suis donc les tutoriels NerdDinner de ScottGu, et j'ai du mal à contourner cette erreur. Je suis en train de mettre en œuvre CRUD, donc dans un premier temps, alors que les données d'édition, j'ai commencé avec ce code:Avoir un problème à comprendre pourquoi NerdDinner MVC retourne une erreur

 public ActionResult Edit(int id) 
    { 
     Dinner dinner = dinnerRepository.GetDinner(id); 
     return View(dinner); 
    } 

qui affiche Edit View correctement, et me donne des champs à modifier mes données. Maintenant, quand je continue et mon action Edit se transforme en:

 [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Edit(int id, FormCollection formValues) 
    { 
    Dinner dinner = dinnerRepository.GetDinner(id); 
    UpdateModel(dinner); 
    dinnerRepository.Save(); 
    return RedirectToAction("Details", new { id = dinner.DinnerID }); 
    } 

Je renvoie une erreur 404. Apparemment, la vue Modifier ne peut pas être trouvée. J'ai vraiment du mal à comprendre pourquoi cela se passe. J'ai même essayé de copier la syntaxe exacte (ce que je n'aime pas faire) mais pas de chance. Ai-je manqué quelque chose d'aussi évident?

EDIT: J'arrive dès que j'ajouter cette ligne:

[AcceptVerbs (HttpVerbs.Post)]

qui peut aider?

+0

Est-ce que le 404 se passe sur le GET ou le POST? La première méthode est pour le GET, la seconde est pour le POST. Comme le dit blowdart, nous ne modifions PAS la méthode d'édition, mais nous en ajoutons une seconde. –

Répondre

4

Vous devez avoir les deux méthodes dans votre contrôleur.

La première méthode est pour les demandes GET, demandes qui ne sont pas le résultat d'une soumission de formulaire. Ce sont ceux que vous voyez si vous allez/Edit/1/Edit/2 etc.

La méthode ActionResult Edit() ne remplace pas votre première méthode Edit() mais est une méthode supplémentaire qui répond aux requêtes POST qui sont le résultat de l'envoi du formulaire

+0

travaillé. Merci beaucoup. Je ne peux pas croire que je n'ai pas compris cela dans la documentation. – BBetances

0

Vous avez actuellement deux Editer des actions, et vous? L'un doit être sans l'attribut [AcceptVerbs] et est utilisé pour afficher la vue d'édition initiale, l'autre n'accepte que les appels POST et est utilisé pour convertir les valeurs du formulaire en modèle et les enregistrer dans le magasin de données . De votre libellé, il semble qu'au lieu d'ajouter une seconde action d'édition (méthode) vous avez édité l'ancienne.

+0

c'est exactement ce que j'ai fait. J'aurais dû lire le tutoriel un peu plus près quand il a dit de surcharger l'action. Merci à tous pour l'aide. – BBetances

Questions connexes