【发布时间】:2014-08-23 12:36:32
【问题描述】:
我遇到了一个问题,将 T 类型的列表从视图传递回控制器,该控制器在部分视图中加载列表以在模式对话框中显示它们。
这是我所拥有的:
视图传递给控制器:
@foreach(var queue in itemQueues)
{
<td>@Html.ActionLink(queues.OpenItems.Count.ToString(), "ItemQueueDetails", "Pod", new { collection = queue.OpenItems }, null)</td>
}
控制器传递给局部视图:
public ActionResult ItemQueueDetails(List<Item> collection)
{
var cols = typeof(Incident).GetProperties();
ViewData["DataHeaders"] = cols;
ViewData["DataRows"] = collection;
return PartialView("QueueDetails");
}
局部视图符合您的预期,所以我现在认为它并不相关。
唯一的问题是,无论有多少元素存储在作为参数传递给 ItemQueueDetails ActionResult 的队列列表中,collection 参数总是以零元素列表结束。
我的应用程序只显示数据。初始视图仅显示队列计数(尽管它传递了整个列表并仅显示计数),而单击 # of items 应该显示显示实际详细信息的模式。
【问题讨论】:
-
您是否尝试改用
ViewBag? -
@abatishchev 我的理解是 ViewBag 允许将数据从控制器传递到视图,而不是相反。我需要将我的列表从视图传递给控制器。
-
视图不应该首先以这种方式将任何内容发送回控制器。尝试重新思考/重新设计。
-
也尝试添加另一个局部视图,不要重复使用第一个。
-
既然您在渲染主视图时已经有了数据,那么您是否有理由不只是在主视图中包含详细信息(可能在隐藏元素中并切换其可见性)?
标签: c# asp.net-mvc