2010-01-31 8 views
0

J'ai une page d'édition que je veux utiliser pour permettre la modification des détails de l'utilisateur. Lorsque je mets à jour certains détails de l'utilisateur et les publie sur ma machine de développement, cela fonctionne comme prévu, les détails sont sauvegardés dans la BD et je suis redirigé vers la page des détails qui affiche les informations mises à jour.ASP.NET MVC - Post fonctionne sur la machine de développement, mais pas en direct

Lorsque je publie le site sur le serveur en ligne et que j'effectue les mêmes actions, il ne s'éloigne pas fondamentalement de la page d'édition. La seule fois que la page publiera et redirigera avec succès est si aucun des détails n'est modifié à partir des valeurs d'origine.

Voici le code pour l'affichage:

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Edit(int id, FormCollection formValues) 
{ 
    var repo = new UserRepository(); 
    var user = repo.GetById(id); 
    try 
    { 
     double value; 
     foreach(var stat in user.Stats) 
     { 
      var rawValue = formValues[stat.Name]; 
      if (Double.TryParse(rawValue, out value)) 
      { 
       stat.Value = value; 
      } 
      else 
      { 
       ModelState.AddModelError(stat.Name+"Err", "Value must be numerical."); 
      } 
     } 
     UpdateModel(user); 

     if (ModelState.IsValid) 
     { 
      repo.Save(); 
      return RedirectToAction("details", new { id = user.ID }); 
     } 
     else 
      throw new InvalidOperationException(); 
    } 
    catch 
    { 
     foreach (var issue in user.GetRuleViolations()) 
     { 
      ModelState.AddModelError(issue.PropertyName, issue.ErrorMessage); 
     } 
     return View(user); 
    } 
} 

Je suis sur Windows Server 2003 + IIS 6.0

+0

Est-ce publié sur un serveur hébergé, ou un serveur sur lequel vous avez un contrôle total? Avez-vous accès aux journaux système? – Jay

+0

@Jay, j'ai le plein contrôle du serveur. Quels journaux dois-je vérifier? – James

Répondre

3

Etes-vous sûr que vous ne voyez pas le comportement correct? Vous utilisez une approche d'essai générique, qui renvoie simplement la vue en cas de problème. Supposons que votre méthode repo.Save() échoue, sans "violation de règle" - alors vous allez simplement voir votre vue à nouveau, car il n'y a pas de code spécifique pour faire face à autre chose.

+0

@reallyJim, bon point en fait, le ModelState.IsValid validera uniquement les propriétés * User * et non celles * User.Stats *. Donc, il y a peut-être un problème interne et parce qu'il n'y a pas de ModelErrors à afficher, rien ne s'affiche.Comment puis-je vérifier que c'est le cas? – James

+0

Relancez l'exception dans le bloc catch pour isoler le problème. – Jay

+0

Je dirais attraper une exception réelle et l'enregistrer - vous pouvez trouver quelque chose dans ses détails que vous n'aviez pas prévu de voir. – reallyJim

0

Que exécutez-vous sur la machine dev et que exécutez-vous sur la machine en direct?

Cela peut être dû à la capacité de IIS 6 à gérer le routage.

EDIT

Windows 7 exécute IIS 7 Windows 2003 exécute IIS 6

c'est là, je pense que vos mensonges.

Le lien suivant peut aider:

http://haacked.com/archive/2008/11/26/asp.net-mvc-on-iis-6-walkthrough.aspx

+0

Pourriez-vous élaborer sur * run *? Je cours le site Web sur ma machine de dev à l'intérieur de VS2008 par l'option «la page de vue dans le navigateur». Ma machine dev est Windows 7. – James

+0

@Burt, j'ai déjà fait ce didacticiel particulier, j'ai installé le joker MVC etc. Le site lui-même une fois publié est en fait un répertoire virtuel si cela aide. – James

0

Il me semble qu'il y a une erreur en essayant de mettre à jour les données ... Peut-être une sorte de problème de connexion de données ou une erreur de type de données? Vous n'avez pas mentionné si les données sont effectivement sauvegardées et si le seul problème est la redirection ... qui est-ce? Je suis presque sûr que les données ne sont pas enregistrées dans la base de données et je vous suggère donc de regarder de plus près vos connexions db pour vous assurer que les connexions db sont valides pour le site publié. Si la connexion db semble correcte, vérifiez que les données que vous entrez sont valides dans la base de données.

Vous pouvez également changer le code un peu pour savoir si le problème est à la base de données en redirigeant l'utilisateur dans le cas où le ModelState.IsValid retourne false:

return RedirectToAction("errorpage"); 
+0

@ Ricardo, je suis assez confiant que la connexion DB n'est pas le problème, la page se remplit bien, c'est quand il s'agit de poster et mettre à jour le modèle est où le problème semble être. – James

+0

Il semble que ce soit un problème pour sauvegarder les données sur la base de données après tout. –

Questions connexes