2009-08-31 9 views
1

Comment utiliser plusieurs actions sur le même contrôleur?Plusieurs actions sur le même contrôleur et affichage dans asp.net MVC

J'utilise le projet par défaut qui apparaît lors de l'ouverture d'un nouveau projet dans asp.net mvc.

J'ajouté une action Index sur la HomeController d'accepter une valeur d'une zone de texte ... comme celui-ci

string strTest; 
     [AcceptVerbs(HttpVerbs.Post)] 
     public ActionResult Index(FormCollection frm) 
     { 
      strTest = frm["testbox"]; 

      return RedirectToAction("Index"); 
     } 

Maintenant, je dois montrer la valeur entrée à l'utilisateur. Comment puis-je faire cela?

J'ai essayé ..

public ActionResult Index() 
{ 
    this.ViewData.Add("ReturnMessage", strValue); 
    return View(); 
} 

Voici ce que j'ai mis sur mon point de vue ..

<% using (Html.BeginForm()) 
    { %> 
<p> 
    <%=Html.TextBox("testbox")%> 
</p> 
<p> 
    <input type="submit" value="Index" /></p> 
<p> 
    <%= Html.ViewData["ReturnMessage"] %> 
</p> 
<% } %> 

le compilateur ne me laisse pas généralement ajouter un autre index avec la même constructeur pour afficher le message entré à l'utilisateur qui est évident dans C# je sais. Mais alors, comment puis-je récupérer le message à l'utilisateur. Merci

Répondre

1

Méthode simple

À votre avis

<% using (Html.BeginForm()) {%> 
    <%= Html.TextBox("myInput") %> 
    <%= ViewData["response"] %> 
<%}%> 

Dans votre contrôleur;

public ActionResult Index() 
{ 
    return View(); 
} 

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult Index(FormCollection collection) 
{ 
    ViewDate.Add("response", collection["myInput"]); 
    return View(); 
} 
+0

l'a obtenu ... désolé, c'était une erreur idiote que j'ai faite ... puisque je retournais aussi des données de la base de données de l'entité J'ai retourné view() au lieu de renvoyer ces données. Il a donc jeté l'exception de référence d'objet. Merci encore – Josh

+0

Aucun problème Josh. Content que nous vous ayons travaillé. – griegs

1

Josh, voir la question précédente que vous avez posée.

Là-dedans, j'ai eu <%= Html.textbox("myInput", Model.myInput....

c'est le Model.myInput qui va mettre la valeur de votre modèle dans le texte de la zone de texte yoru.

EDIT

Ou si vous ne voulez pas dans une zone de texte puis il suffit de faire;

EDIT 2

Vous pouvez ajouter autant d'articles dans votre nouveau modèle de vue forme et il a, dans ce cas, rien à voir avec une base de données. Voyez votre question précédente sur où j'ai déclaré la classe.

la classe peut avoir autant de propriétés que vous le souhaitez. Donc, vous pouvez ajouter un string myResponse {get;set;} pour retourner une réponse à votre vue, alors vous pouvez utiliser <%=Model.myResponse%>

Espérons que cela aide.

+0

Je sais ... mais pour l'instant ... Je fais juste un test sans modèle ... parce que j'ai besoin d'enseigner à quelqu'un d'autre qui ne connaît pas du tout le MVC. – Josh

+0

Je pense que le modèle dans le sens où vous voulez dire que j'ai besoin d'importer une base de données dans le projet et de construire un fichier EDMX etc droite? – Josh

+0

Je pense toujours que vous devriez l'apprendre de cette façon car c'est la façon préférée. Je ne suis pas un grand fan de ViewData mais c'est personnel. Je préférerais toujours l'approche du modèle. Voir Édition 2 – griegs

3

Eh bien, un contrôleur correspond à un itinéraire, en fonction des paramètres envoyés. Vous pouvez superposer vos itinéraires du plus spécifique au moins spécifique, il vérifie dans l'ordre. Le premier qui frappe gagne.

L'autre réponse est soit fortement tapez votre modèle envoyé à votre point de vue, ou la stocker dans le ViewData:

ViewData["Message"] = "Welcome to ASP.NET MVC!"; 

Accédez ensuite dans votre vue:

<%= Html.Encode(ViewData["Message"]) %> 
+0

La vue accepte un modèle, qui n'a rien à voir avec les bases de données ou tout autre élément, sauf s'il stocke des données pour la vue. Vous pouvez surcharger ce modèle en définissant une classe puis "Hériter" cette classe dans la vue. La classe surchargée peut contenir plusieurs ensembles de données, comme une liste de villes et une liste de produits (tout ce dont la vue a besoin). –

+2

+1 Exactement. Et de loin la meilleure approche plutôt que d'utiliser la collection ["???"]; À mon avis. – griegs

+0

ViewData ["Message"] chose ne fonctionne pas sur mon action de publication. Si un utilisateur entre son nom dans une zone de texte, je veux les saluer avec Bonjour et leur nom – Josh

Questions connexes