Мне было интересно, есть ли элегантный способ добавить массив сложных типов в RouteValueDictionary или совместимый тип?
Например, если у меня есть класс и действие:
public class TestObject
{
public string Name { get; set; }
public int Count { get; set; }
public TestObject()
{
}
public TestObject(string name, int count)
{
this.Name = name;
this.Count = count;
}
}
public ActionResult Test(ICollection<TestObjects> t)
{
return View();
}
то я знаю, что если я вызову это действие через URL "/Test?t[0].Name=One&t[0].Count=1&t[1].Name=Two&t[1].Count = 2", что MVC автоматически преобразует эти параметры строки запроса в тип ICollection. Однако, если я вручную создаю ссылку где-то, используя Url.Action(), и я хочу передать RouteValueDictionary параметров, когда я добавляю ICollection в RouteValueDictionary, Url.Action просто отображает его как тип, например & т = System.Collections.Generic.List.
Например:
RouteValueDictionary routeValDict = new RouteValueDictionary();
List<TestObject> testObjects = new List<TestObject>();
testObjects.Add(new TestObject("One", 1));
testObjects.Add(new TestObject("Two", 2));
routeValDict.Add("t", testObjects);
// Does not properly create the parameters for the List<TestObject> collection.
string url = Url.Action("Test", "Test", routeValDict);
Есть ли способ заставить его автоматически отображать эту коллекцию в формат, который MVC также понимает, как отображать карту, или я должен делать это вручную?
Что мне не хватает, почему они делают это так, чтобы это красивое сопоставление существовало в Action, но не предоставляло способ вручную работать в обратном направлении для создания URL-адресов?