2010-03-26 132 views
0

这可能吗?
我想做的事情是在actionlink中传递一个对象列表作为参数
当我尝试这样做时,列表在到达控制器时总是空的!在asp.net mvc中将视图中的对象列表传递给控制器​​?

在视图

<%= Url.Action("ActionName", new { list = Model.ListOfObjects}) %> 

在控制器

public ActionResult ActionName(List<Object> list) 
    { 
     //Do stuff 
    } 
+0

什么URL被渲染? – SLaks 2010-03-26 12:17:01

+0

/Controller/Object?list=System.Collections.Generic.List%601%5BObject%5D – Boob 2010-03-26 12:21:48

+0

对不起,应该是/Controller/ActionName?list=System.Collections.Generic.List%601%5BObject%5D – Boob 2010-03-26 12:23:04

回答

0

虽然它可能采取的对象列表,它可能不会使你期待看到什么;它实际上可能会吸引列表类(或该列表所代表的任何类)的值,并将其用作参数。

不通过get请求,除非您手动写出参数并反序列化参数。或者,相反,使用表单中的这些值回发到服务器;那么,这将填充正确。

HTH。

1

就是否有可能 - 这是可能的,但不是你想要的方式。请记住,这将转换为一个将被MVC解析的URL,并且不同的参数将作为直接参数或通过模型联编程序传递给动作。

我会建议您尝试弄清楚URL将不得不看起来像然后可能做一些自定义代码来生成URL(也许使用自定义帮助函数/扩展方法)。如果你将它与一个自定义的模型联编程序结合起来,你应该有一个非常优雅的解决方案,它完全符合你的需求

例如,如果您的列表中有字符串类型的3个对象,你可以写一个帮手来生成一个URL像这样(假设列表中包含“第一”,“第二”和“第三”)

/控制器/动作?OBJ1 =第一& OBJ 2 =第二& OBJ 3 =第三

现在你只需要编写一个模型绑定,以查找被称为“OBJ1”项,“OBJ 2”等,并简单地将结果添加到名单。

0

像这样的东西可以工作,如果你需要它在很多地方,我建议你做一个帮手来包含这个逻辑。

<% var values = new RouteValueDictionary(); 
    for (int i = 0; i < Model.ListOfObjects.Count -1; i++) 
    { 
     values.Add("list["+i+"]", Model.ListOfObjects[i]); 
    }%> 
<%= Url.Action("ActionName", values); %> 

该操作将知道如何处理控制器中的列表。

相关问题