【发布时间】:2013-11-13 17:28:31
【问题描述】:
我想知道是否有一种优雅的方法可以将复杂类型的数组添加到 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 的相反方向的方法?
【问题讨论】: