【发布时间】:2009-11-17 23:56:31
【问题描述】:
如果我有这样的动作:
public ActionResult DoStuff(List<string> stuff)
{
...
ViewData["stuff"] = stuff;
...
return View();
}
我可以通过以下网址点击它:
http://mymvcapp.com/controller/DoStuff?stuff=hello&stuff=world&stuff=foo&stuff=bar
但在我的 ViewPage 中,我有以下代码:
<%= Html.ActionLink("click here", "DoMoreStuff", "MoreStuffController", new { stuff = ViewData["stuff"] }, null) %>
不幸的是,MVC 不够聪明,无法识别该操作需要一个数组,并展开列表以形成正确的 url 路由。相反,它只是在对象上执行 .ToString() ,在 List 的情况下只列出数据类型。
当目标 Action 的参数之一是数组或列表时,有没有办法让 Html.ActionLink 生成正确的 URL?
-- 编辑--
正如 Josh 在下面指出的,ViewData["stuff"] 只是一个对象。我试图简化问题,但却导致了一个不相关的错误!我实际上使用的是专用的 ViewPage
<%= Html.ActionLink("click here", "DoMoreStuff", "MoreStuffController", new { stuff = ViewData.Model.Stuff }, null) %>
ViewData.Model.Stuff 被键入为 List
【问题讨论】:
-
ViewData["stuff"] 只是一个对象。当你传入一个真实的列表时会发生什么,比如 {Stuff= (List
)ViewData["stuff"]} 或 {Stuff= ViewData["stuff"] as List } 或 {Stuff= new List(...)}? -
同样的问题...在我目前的实际实现中,我使用紧密耦合的 ViewPage
,因此该行看起来更像: 其中 ViewData.Model.Stuff 被键入为 List
标签: c# asp.net-mvc arrays list asp.net-mvc-routing