複雑な型の配列を 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 は &t= のようにそれを型としてレンダリングします。 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 がマッピング方法も理解できる形式に自動的にレンダリングする方法はありますか、それとも手動で行う必要がありますか?
この美しいマッピングがアクションに存在するようにするのに、URL を作成するために逆方向に手動で作業する方法を提供しないのはなぜですか?