2013-04-02 3 views
0

Je ces deux actions dans mon contrôleur:Erreur contrôleur acessing .... Asp.net 4 mvc

public ActionResult Admin() 
    { 
     var aux=db.UserMessages.ToList(); 

     return View(aux);   

    } 

    public ActionResult Admin(int id) 
    { 
     var aux = db.UserMessages.ToList(); 

     return View(aux); 

    } 

Mais quand je tente d'accéder à "localhost/Doubt/Admin" Je reçois un message disant que son ambigu ... Je ne comprends pas pourquoi est-ce ... Parce que si je n'ai pas id dans l'Url, il devrait appeler la première Action withouth le paramètre id

+0

Comment votre itinéraire est-il défini? – MilkyWayJoe

+0

s'il vous plaît poster l'erreur –

Répondre

2

Il est impossible d'avoir 2 actions avec le même nom sur le même contrôleur qui sont accessibles avec le même verbe (GET dans votre cas). Vous devrez renommer l'une des deux actions ou la décorer avec l'attribut HttpPost, ce qui la rendra accessible uniquement aux requêtes POST. Apparemment, ce n'est pas ce que vous voulez, donc je suppose que vous devrez renommer la seconde action.

2

Sauf si vous spécifiez l'attribut ActionName les deux actions seront trouvées lorsque L'action "Admin" est spécifiée. Les arguments ne sont pas pris en compte lors de la mise en correspondance de la méthode avec le nom de l'action.

Vous pouvez également utiliser les attributs HttpGet/HttpPost pour spécifier l'un pour GET et un autre pour POST.

[ActionName("AdminById")] 
public ActionResult Admin(int id) 

Et dans la route, spécifiez "AdminById" lorsque le chemin contient l'ID.

0

Lorsqu'un utilisateur visualise une page, c'est une requête GET et lorsqu'un utilisateur soumet un formulaire, il s'agit généralement d'une requête POST. HttpGet et HttpPost restreindre une méthode d'action afin que la méthode gère uniquement les demandes correspondantes.

[HttpGet] 
    public ActionResult Admin() 
    { 
     var aux=db.UserMessages.ToList(); 

     return View(aux);   

    } 

    [HttpPost] 
    public ActionResult Admin(int id) 
    { 
     var aux = db.UserMessages.ToList(); 

     return View(aux); 

    } 

Dans votre cas si vous voulez avoir une demande get à la deuxième méthode, vous feriez mieux de renommer votre méthode.

0
As you have define two action method with same name,it get confuse about which method to call. 
so of you put request first time and in controller you have two method with same name than it will show error like you are currently getting due to it try to find method with attribute HttpGet,but you have not mention that attribute on action method,now when you post your form at that time it will try to find method with HttpPost attribute and run that method,so you have to specify this two attribute on same method name 
    Try this 
    [HttpGet] 
    public ActionResult Admin() 
     { 
      var aux=db.UserMessages.ToList(); 

      return View(aux);   

     } 
    [HttpPost] 
     public ActionResult Admin(int id) 
     { 
      var aux = db.UserMessages.ToList(); 

      return View(aux); 

     } 
0

Dans ASP.NET MVC, vous ne pouvez pas avoir deux actions avec le même nom et le même verbe. Vous pouvez écrire le code comme ceci pour garder votre code de lisibilité.

private ActionResult Admin() 
{ 
    var aux=db.UserMessages.ToList(); 
    return View(aux);   

} 

public ActionResult Admin(int id = 0) 
{ 
    if (id == 0) 
     return Admin(); 

    var aux = db.UserMessages.ToList(); 
    return View(aux); 

} 
Questions connexes