2009-06-24 5 views
1

J'ai un problème vraiment étrange avec ASP.Net MVC.Asp.Net MVC - Problème de forme/contrôleur bizarre

J'ai un formulaire, qui affiche 3 valeurs de texte à une méthode d'action appelée créer un utilisateur (par souci de simplicité, disons que c'est le suivant);

public ActionResult CreateUser(string FirstName, string LastName, string Email) 
    { 
     var s = FirstName + LastName + Email; 

     return RedirectToAction("Index"); 
    } 

Dites aussi ma forme est

<% using (Html.BeginForm("CreateUser", "User")) 
    { %> 

    <%=Html.TextBox(("FirstName")) %> 
    <%=Html.TextBox(("LastName")) %> 
    <%=Html.TextBox(("Email")) %> 

    <div><input type="submit" value="Submit" /></div> 

<% } %> 

Maintenant, dans ma méthode d'action, sur le contrôleur de l'utilisateur, les valeurs nom, prénom et email sont tous nuls!

Cependant, si je copie la même méthode sur un autre contrôleur (Game), et que je mets à jour le formulaire à poster, les valeurs de la méthode ne sont pas nulles! Je suis totalement perplexe avec celui-ci.

Les deux contrôleurs sont les mêmes - ils héritent de la même classe de base, les mêmes attributs appliqués pour les

etc.

EDIT: Je l'ai travail (pas sûr de ce que la question sous-jacente était).

J'avais un attribut personnalisé sur ma méthode d'index sur le contrôleur d'utilisateur (ceci analysait essentiellement la propriété HttpContext.Current.User.Identity.Name et la transmettait automatiquement dans la méthode). Pour une raison quelconque, cela posait problème sur la méthode Index, une fois que je l'ai enlevé, tout a commencé à fonctionner comme prévu!

C'était ma méthode d'index avant:

[Authorisation] 
public Action Index(string userName){...} 

et après

public Action Index() {...} 
+0

Bizarre. Essayé d'inspecter les valeurs de poste dans Firebug? – Damien

Répondre

0

Essayez d'ajouter un point d'arrêt à l'intérieur CreateUser et jeter un oeil à la teneur en Request.Form (ou QueryString), ou ValueProvider. Les clés peuvent être différentes.

+0

Le ValueProvider, dans User, a 3 valeurs (controller, action, id), avec les valeurs "Users", "Index" et "" respectivement (je trouve cela bizarre, étant donné que ce devrait être "Users", "CreateUser" Lorsque je le commute sur le contrôleur de jeu, j'obtiens 4 valeurs dans ValueProvider ("FirstName", "controller", "action" et "id") avec les valeurs "Jamie", "Game", " CreateUser "et" "), et cela fonctionne comme prévu. Je n'arrive pas à comprendre pourquoi le ValueProvider est différent simplement en changeant les contrôleurs? J'ai essayé de renommer le contrôleur de l'utilisateur aux utilisateurs mais les résultats sont les mêmes .... – Jamie

1

Par les sons des choses (fonctionne quand vous changez le contrôleur vers lequel il écrit) cela aura probablement quelque chose à faire avec 'Utilisateur' étant un mot réservé d'un certain type.

Cela a un sens, l'utilisateur est utilisé dans le cadre asp.net pour faire référence à l'objet IPrincipal actuel.

Alors oui, renommer votre contrôleur à quelque chose de différent.

HTHS, Charles