2012-12-14 13 views
9

Mam tablicę ciągów, które muszę przekazać w ciągu kwerendy Url.Action.URL.Action z tablicą znaków?

Url.Action("Index", "Resource", new { FormatIds = Model.FormatIDs}) 

W tej chwili link jest wyświetlany w mojej przeglądarce jako System.String [] zamiast ciągu zapytania. Czy MVC może to zrobić automatycznie z powiązaniem modelu?

muszę go powiązać z mojego działania kontrolera jak:

public ActionResult Index(string[] formatIDs) 
+1

Jakich produktów oczekujesz? –

+0

Potrzebuję go do powiązania z działaniem kontrolera, który wygląda tak: Publiczny indeks ActionResult (string [] formatIDs) – user547794

+0

ciąg zapytania zazwyczaj nie jest najlepszym sposobem na zrobienie tego. –

Odpowiedz

7

Aby uzyskać listę ciąg automatycznie wiązać przy użyciu domyślnego wiążący, trzeba będzie zapewnić im jak:

name=value&name=value2&name=value3 

Musisz więc przekonwertować swoją listę na:

Index?formatIDs=1&formatIDs=2&formatIDs=3 
+0

+1 dla domyślnego segregatora modelu, czyli poprawnego anwser. Bardzo ładne Queti. –

+8

To nie odpowiada na pytanie. Chce, aby Url.Action poprawnie wyprowadził wartość trasy tablicy do kwerendy. Nie pyta, jak wiązać taką wartość. – Sam

6

Aby użyć domyślnego segregatora, Należy skończyć z czymś takim:

Index?formatIDs=value1&formatIDs=value2&formatIDs=value3 

możesz powraca prywatną kolekcję o nazwie dokumentacja HttpValueCollection nawet mówi, że to NameValueCollection użyciu narzędzia ParseQueryString. Następnie dodaj klucze ręcznie, HttpValueCollection wykonaj kodowanie za Ciebie. A potem po prostu dołączyć QueryString ręcznie:

var qs = HttpUtility.ParseQueryString(""); 
new string[] { "value1", "value2", "value3" }.ToList().ForEach(x => qs.Add("formatIDs", x)); 

Url.Action("Index", "Resource")[email protected] 
+0

Twoja sugestia działa. Zastanawiam się jednak, dlaczego wysyłanie szeregu ciągów z widoku maszynki do kontrolera MVC jest wciąż tak dziwne i złożone. – Sven

+0

Ponieważ normalnie powinieneś użyć elementu HTML formularza z get verb i wszystko będzie gładkie i proste. –

0

Jest też inny sposób za pomocą RouteValueDictionary z tablicą:

@{ 
    var parameters = new RouteValueDictionary(); 

    for (var i = 0; i < Model.CustomList.Count; ++i) 
    { 
     parameters.Add($"customListId[{i}]", Model.CustomList[i]); 
    } 
} 

Wykorzystanie:

var url = '@Html.Raw(Url.Action("ControllerActioon", "Controller", parameters))'; 

Nadal nie bardzo elegancki - ale praca .