3

我对 MVC 3 还比较陌生。我需要将数据从我的 @Html.Action 方法通过控制器传递到局部视图。

所以这是我的流程。

我会像这样调用@Html.Action:

@Html.Action("SidebarMain", "Home", new List<int>(new int[] {1, 2, 3}))

然后它会击中我的控制器。这是我在家庭控制器中的方法:

public ActionResult SidebarMain(List<int> items)
{
    return View(items);
}

然后我的部分视图应该能够像这样访问数据:

@model List<int>

@{
    ViewBag.Title = "SidebarMain";
    Layout = null;
}

<div>
@foreach (int item in Model)
{
    <div>@item</div>
}
</div>

但是:我得到模型的空异常,这意味着它没有通过。

4

4 回答 4

5

尝试这个:

Html.Action("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) })

并在你的 SidebarMain Action 中放置一个断点来查看,如果你得到items

于 2013-01-20T02:10:05.213 回答
1

简而言之:的代码在Html.Action(). 除此之外,代码应该是功能性的。

Html.Action("SidebarMain", "Home", new {items = new List<int>(new int[] {1, 2, 3}) })

作为建议的做法,我会ViewModel在我的视图中使用专用的,而不仅仅是发送整数数组。因为,以这种清洁方式ViewModel- 您在视图中显示的属性的容器,您的代码可能会在以后添加其他属性,因为我们的代码总是在发展。

参考 ViewModel 概念的用法:练习 5:创建视图模型

于 2013-01-20T02:20:41.070 回答
0

DarthVader 的建议可能奏效了。这就是我最终做的事情:

1) 移除控制器

2)这样称呼它:

@{Html.RenderPartial("SidebarMain", new int[] {1,3,4,2});}

3)这是我的视图代码:

@model int[]
@foreach( int item in Model){
...
于 2014-08-21T17:39:02.683 回答
0

达斯维德的好答案。您是否将其作为 Ajax 返回?如果您将它嵌入到主视图中,您应该将其作为 PartialView 返回

return PartialView("SidebarMain", model);

这是 SidebarMain 是您要返回的局部视图的名称。结合 DarthVader 的建议尝试此操作,并确保您获得了一个模型以传回视图。

发布后,我意识到您正在使用 Html.Action。如果这是一个真正的侧边栏,它应该加载 ajax 作为局部视图,你应该调用

Ajax.ActionLink("SidebarMain", "Home", new { items = new List<int>(new int[] {1, 2, 3}) })

这将允许您停留在当前页面上。如果您不是在寻找 ajax 功能,我为兔子足迹道歉 :)

于 2013-01-20T02:15:18.290 回答