Question

J'ai rencontré un problème étrange avec la méthode ActionLink dans la version bêta d'ASP.NET MVC. Lors de l'utilisation de la surcharge Lambda à partir des contrats à terme MVC, il semble impossible de spécifier un paramètre extrait de ViewData.

Quand j'essaie ceci:

<%= Html.ActionLink<PhotoController>(p => p.Upload(((string)ViewData["groupName"])), "upload new photo") %>

Le code HTML contient un lien avec une URL vide.

    <a href="">upload new photo</a>

Cependant, si je code en dur le paramètre, comme ceci:

<%= Html.ActionLink<PhotoController>(p => p.Upload("groupA"), "upload new photo") %>

La sortie contient une URL réelle.

    <a href="/group/groupA/Photo/Upload">upload new photo</a>

Je suppose que cela a probablement quelque chose à voir avec la visibilité et la disponibilité de ViewData, et qu’il n’est pas là lorsque le Lambda est évalué par les éléments internes du cadre. Mais ce n’est qu’une supposition.

Est-ce que je suis en train de faire quelque chose d’erreur dans le premier exemple, ou s’agit-il d’une erreur de bogue?

Mise à jour : j'utilise la version la plus récente des contrats à terme MVC. Il a été souligné que cela fonctionne pour certaines personnes. Comme cela ne fonctionne pas pour moi, cela me fait penser que c'est quelque chose de spécifique à ce que je fais. Quelqu'un a-t-il une suggestion à faire, car celui-ci me laisse vraiment perplexe?

Était-ce utile?

La solution 2

Ok, j'ai compris quel était mon problème.

Apparemment, je ne définissais même pas l'emplacement ViewData que je tentais de lire dans la vue, ce qui en faisait une valeur nulle.

J'écrivais donc effectivement:

<%= Html.ActionLink<PhotoController>(p => p.Upload(null), "upload new photo") %>

Je pense que le facteur décisif dans tout cela était le fait que le paramètre (nom du groupe) représente une valeur non par défaut dans ma table de routage.

routes.MapRoute(
    "Group",  
    "group/{groupname}/{controller}/{action}/{id}",
    new {controller = "Photos", action = "View", Id = ""});

Donc, selon la règle de routage, la propriété nom_groupe doit être présente, mais, selon aller, le nom de groupe Lambda a été omis (null). Cela a empêché la structure MVC de trouver une route qui satisfasse ma requête et de ne renvoyer que null.

Autres conseils

Avez-vous mis à jour votre version de Microsoft.Web.Mvc.dll où réside le lien d’action hautement typé.

Apparemment, cette dll a été mise à jour pour la version bêta. La fonction a peut-être été légèrement modifiée.

Je viens d'essayer cette

<%= Html.ActionLink<HomeController>(x=>x.Search((string)ViewData["search"]), "search?") %>

et cela a bien fonctionné.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top