ASP.NET MVC 3 + Rasoir d'Erreur de l'Enfant: les actions ne sont pas autorisés à effectuer des actions de redirection
Donc j'ai vu cette question ici, mais il n'a pas vraiment résolu ce problème pour moi.
J'ai un ASP.NET MVC 3 + Rasoir application qui s'exécute sur IIS5 sur mon dev pc, puis IIS6 pour mon dev web server. Tout fonctionnait très bien jusqu'à ce que je déployé. Je suis bin le déploiement de tout, pas de problèmes sur ce front (que je peux dire).
Maintenant, je me fais cette Enfant les actions ne sont pas autorisées à effectuer une redirection actions d'erreur sur ma page. Je ne suis pas sûr de la façon de repérer où il est défaillant.
Je suis en utilisant @Html.Action de tirer dans certaines boîtes déroulantes avec des données:
public ActionResult Hierarchy()
{
List<Store> storeList = DBService.getStores();
if (DBService.Error != null)
return RedirectToError(DBService.Error);
List<Department> deptList = DBService.getDepts();
if (DBService.Error != null)
return RedirectToError(DBService.Error);
VM_Hierarchy hierarchy = new VM_Hierarchy(storeList, deptList);
return View(hierarchy);
}
Si je supprime le @Html.Ligne d'Action, la page se rendre. Il brisera alors si je fais une requête AJAX à l'action d'un contrôleur comme ceci:
[HttpPost]
public ActionResult InventoryList(string fromDate, string toDate)
{
List<Inventory> inventories = DBService.getInventories(fromDate, toDate);
if (DBService.Error != null)
return RedirectToAction("Error");
return View(inventories);
}
Si ce n'est pas correct, comment suis-je censé rediriger vers une page d'erreur ou de dicter ce que la vue revient sur un post? Toute aide est appréciée. Merci.
OriginalL'auteur IronicMuffin | 2011-04-13
Vous devez vous connecter pour publier un commentaire.
C'est probablement parce que vous recevez des erreurs à partir de votre base de données de service lorsqu'il est déployé, vous n'obtenez pas localement. Ce qui est à l'origine de l'essayer et de redirection à partir d'une action enfant, que vous ne pouvez pas le faire.
Vous pourriez vouloir essayer d'obtenir la liste déroulante de données dans votre action principale, et mettre le tout dans un ViewModel, de sorte que vous n'utilisez pas l'enfant d'actions. Si cela échoue, vous pouvez rediriger le contenu de votre coeur. Pour l'AJAX, vous aurez besoin pour gérer les erreurs sur le client et faire quelque chose de raisonnable, vous ne pouvez pas simplement renvoyer une redirection à partir d'un appel AJAX.
Cette question a certains pour plus d'informations:
Pourquoi Rediriger les Résultats ne sont pas autorisés dans les Actions Enfant dans Asp.net MVC 2
Eh bien, la redirection de contrôleurs est tous sur le serveur, le problème est que vous êtes la redirection d'un enfant de l'action ou de l'appel AJAX - dans les deux cas, une partie d'une page existe déjà, et vous ne pouvez pas simplement faire une redirection dans le milieu de la page.
Je suppose que je ne suis pas. Je me dis que je suis en train d'obtenir le point de vue original du code HTML ou un nouvel affichage du HTML pour le rendu de la page. Je ne vois pas où est le problème. Je crois que je vais être de l'envoi de retour javascript pour les partiels? Comment voulez-vous choisir la ou partielle de charge basé sur ce qui se passe côté serveur?
Et aussi...pourquoi ne présente pas d'erreur quand j'ai été le tester en local?
Dans le cas de l'action de l'enfant, ce qui se passe est la principale action est en cours d'exécution, et de la création de la page de réponse (une "HTTP 200' réponse). Alors l'enfant d'action s'exécute, comporte une erreur, et tente de rediriger (qui est une " HTTP 302 réponse ou similaire). Vous ne pouvez pas faire deux réponses en même temps, de sorte MVC ne vous laissera pas faire.
OriginalL'auteur Grant Crofton
si vous mettez dans l'action enfant
(ControllerContext.ParentActionViewContext.Controller as System.Web.Mvc.Controller).Response.Redirect(Url.Action("Action", "Controller"));
il va rediriger à partir de la childaction.OriginalL'auteur Tom Maxwell
J'ai eu un problème similaire, mais pour la vie de moi, je ne pouvais pas trouver où la redirection de provenance. Une fois j'ai tout compris, je pensais que je poste une réponse dans le cas où il arrive à quelqu'un d'autre.
Si la source de la redirection n'est pas évident à partir de l'impératif de code, par exemple:
Regarder le déclaratif code!
Dans mon cas, c'était une autorisation problème, de sorte que l'attribut était à l'origine de la redirection, et mes yeux ont été de filtrage de l'existence de l'attribut.
OriginalL'auteur David