Jeśli mam działanie takiego:ASP.Net MVC RouteData i tablice
public ActionResult DoStuff(List<string> stuff)
{
...
ViewData["stuff"] = stuff;
...
return View();
}
mogę uderzyć go z następującym adresem URL:
http://mymvcapp.com/controller/DoStuff?stuff=hello&stuff=world&stuff=foo&stuff=bar
Ale w moim ViewPage, mam ten kod :
<%= Html.ActionLink("click here", "DoMoreStuff", "MoreStuffController", new { stuff = ViewData["stuff"] }, null) %>
Niestety MVC nie jest wystarczająco inteligentny, aby uznać, że akcja toczy tablicę i rozwija listę do tworzenia odpowiednich ro url ute. zamiast tego po prostu robi .ToString() na obiekcie, który po prostu wymienia typ danych w przypadku listy.
Czy istnieje sposób, aby Html.ActionLink wygenerował prawidłowy adres URL, gdy jednym z parametrów docelowej akcji jest tablica lub lista?
- edycja -
Jak Josh wskazał poniżej ViewData [ "rzeczy"] to tylko przedmiot. Próbowałem uprościć problem, ale spowodowałem niezwiązany błąd! W rzeczywistości używam dedykowanego ViewPage <T>, więc mam ściśle związany model świadomego modelu. Actionlink faktycznie wygląda:
<%= Html.ActionLink("click here", "DoMoreStuff", "MoreStuffController", new { stuff = ViewData.Model.Stuff }, null) %>
Gdzie ViewData.Model.Stuff jest wpisany jako Lista
ViewData [ "rzeczy"] to tylko przedmiot. Co się stanie, gdy przejdziesz na prawdziwą listę, na przykład {Stuff = (Lista) ViewData ["stuff"]} lub {Stuff = ViewData ["stuff"] jako List } lub {Stuff = new List (...)}? –
@Josh, dokładnie moje myśli. –
ten sam problem ... W mojej obecnej implementacji używam ściśle powiązanego ViewPage, więc linia wygląda bardziej jak: <% = Html.ActionLink ("kliknij tutaj", "DoMoreStuff", "MoreStuffController", nowy {stuff = ViewData.Model.Stuff}, null)%> gdzie ViewData.Model.Stuff jest wpisany jako lista –
puffpio