2009-11-20 10 views
0

Mon point de vue:Dans ASP.NET MVC avec Spark View Engine sur une erreur de soumission de formulaire, pourquoi une ressource 404 est-elle introuvable?

/utilisateur/EditUserName/2/me

<viewdata model="EditUserNameViewData" /> 
<form action="~/User/EditUserName" method="post" class="span-15 last"> 
!{Html.TextBox("newUserName")} 
<Submit id='"chooseNewName"' value='"Choose new name"' /> 
</form> 

actions contrôleur:

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult EditUserName(int id) 
{ 
EditUserNameViewData vd = new EditUserNameViewData(); 
vd.ExistingName = _userRepository.Get(id).UserName; 
return View("EditUserName", vd); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult EditUserName(string newUserName) 
{ 
try 
{ 
    // fails 
} 
catch(RulesException errors) 
{ 
    errors.AddModelStateErrors(ModelState, string.Empty); 
    return View(); 
} 
} 

ne semble pas fonctionner comme il le redirige vers

la vue de retour()

/Utilisateur/EditUserName

et me donne un 404 erreur. WTF? J'utilise xVal pour la validation et tout fonctionne à cette fin, mais je ne peux pas l'obtenir pour réafficher la page précédente avec les informations affichées par l'utilisateur dans la boîte. Quelqu'un sait ce que je fais mal? Cela me rend fou!

Modifier

Je ne suis pas sûr que ce soit un bug dans Spark ou ce que le diable se passe. Dès que j'ajoute une page EditUserName.aspx je ne reçois plus une erreur 404 et ça fonctionne correctement, en repassant la page sans problème ??? Comment diable sont les autres personnes ne rencontrent pas ce problème? J'ai lu tout ce que je pouvais trouver et je ne vois rien de mal à ce que je fais. Pourquoi cela fonctionnerait-il avec le moteur de vue normal? Je ne veux donc pas revenir à l'utilisation de l'autre juste pour l'entrée de l'utilisateur, mais je me sens comme si je n'avais pas d'autre choix ici.

Vue:

<%@ Page Language="C#" Inherits="System.Web.Mvc.ViewPage" %> 

<form action="/User/EditUserName/<%= ((EditUserNameViewData)ViewData.Model).User.Id %>/<%= ((EditUserNameViewData)ViewData.Model).User.UserName %>" method="post" class="span-15 last"> 
<input type="text" id="newUserName" name="newUserName" /> 
<input type="submit" id="chooseNewName" value="Choose new Name" /> 
</form> 

Répondre

0

j'appelais Html.RenderAction dans mon page maître. J'étais en train de "poster" mon formulaire, mais ma méthode d'action avait un attribut [AcceptVerbs (HttpVerbs.Get)] - cela forçait une erreur 404 non trouvée et c'était de toute évidence ma faute. Super content je l'ai compris, mais quelle douleur.