2009-01-15 4 views
1

Je vois qu'il y a Controller.RedirectToAction(string actionName, string controllerName, object values) mais je n'ai jamais eu le valeurs paramètre à travailler. Considérez que je veux faire la surcharge suivante des actions dans un contrôleur:Quel est le problème avec le paramètre values ​​dans ASP.NET MVC?

public ActionResult Read() 
{ 
    return RedirectToAction("ReadPage", "MyController", 1); 
} 

public ActionResult ReadPage(int page) 
{ 
    // Doing the actual stuff 
} 

... Je me exception lorsque je tente d'aller à l'action Read. La même chose vaut avec Html.ActionLink.

Qu'est-ce qui se passe avec ça? Pouvez-vous passer des valeurs aux contrôleurs sans aller au navigateur du tout dans MVC?

+0

Notez ma mise à jour sur le fait de ne pas avoir besoin de 2 méthodes ici ... –

Répondre

3

Essayez d'utiliser:

return RedirectToAction("ReadPage", "MyController", new {page = 1}); 

Il a besoin de savoir quel argument vous dire (comme dans le cas plus général, vous pouvez avoir beaucoup de paramètres), qu'il peut déduire de ce qui précède. Le modèle de type anonyme (ci-dessus) est très cmomon dans ASP.NET MVC, bien que dans beaucoup de cas je crois que vous pouvez également lui donner un dictionnaire peuplé pour signifier la même chose.

De plus, il n'y a pas besoin de deux actions dans ce cas; vous pouvez configurer vos itinéraires pour fournir des valeurs par défaut; voici quelques que j'ai posté plus tôt:

public ActionResult Search(string query, int startIndex, int pageSize) 
    { 
     ... 
    } 

avec des itinéraires:

routes.MapRoute("Search", "Search/{query}/{startIndex}", 
      new { 
       controller = "Home", action = "Search", 
       startIndex = 0, pageSize = 20 
      }); 

Maintenant, si je ne l'offre pas startIndex, il passe 0 à ma recherche par défaut. Je peux donc naviguer vers "/ Foo" pour une recherche par défaut, ou "/ Foo/100" pour faire la même recherche à partir de 100. Alternativement, les arguments peuvent être sur la chaîne de requête, et seront toujours par défaut en utilisant les valeurs de le type anon.

+0

Ah. Ça marche. Merci! – Spoike

Questions connexes