Domanda

Ho riscontrato un problema strano con il metodo ActionLink in ASP.NET MVC Beta. Quando si utilizza il sovraccarico Lambda dai futures MVC, non riesco a specificare un parametro estratto da ViewData.

Quando provo questo:

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

L'HTML contiene un collegamento con un URL vuoto.

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

Tuttavia, se codifico il parametro, in questo modo:

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

L'output contiene un URL reale.

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

Suppongo che ciò abbia probabilmente a che fare con la visibilità e la disponibilità di ViewData, e non essendoci quando Lambda viene valutata dagli interni del framework. Ma questa è solo una supposizione.

Sto facendo qualcosa di sbagliato nel primo esempio per causare questo, o è un po 'a corto di bug?

Aggiorna : sto utilizzando l'ultima versione dei futures MVC. È stato sottolineato che questo funziona per alcune persone. Dal momento che non funziona per me, questo mi fa pensare che sia qualcosa di specifico per quello che sto facendo. Qualcuno ha qualche suggerimento su cosa guardare dopo, perché questo mi ha davvero lasciato perplesso.

È stato utile?

Soluzione 2

Ok, ho capito quale fosse il mio problema.

Apparentemente non stavo nemmeno impostando lo slot ViewData che stavo provando a leggere nella vista, risultando in un valore nullo.

Così effettivamente stavo scrivendo:

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

Penso che il kicker finale di tutto ciò sia stato il fatto che il parametro (groupname) rappresenta un valore non predefinito nella mia tabella di routing.

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

Quindi, secondo la regola di routing, deve essere presente la proprietà groupname, ma secondo go il Lambrop gropname è stato omesso (null). Ciò ha comportato l'impossibilità per il framework MVC di trovare una route che soddisfacesse la mia query e che restituisse null.

Altri suggerimenti

Hai aggiornato la tua versione di Microsoft.Web.Mvc.dll in cui risiede il link di azione tipizzato fortemente.

Apparentemente questa dll è stata aggiornata per la versione Beta. La funzione potrebbe essere stata leggermente modificata.

Ho appena provato questo

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

e ha funzionato bene.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top