从Html传递数据.操作到分部视图

本文关键字:视图 操作 数据 Html | 更新日期: 2023-09-27 17:54:45

我对MVC 3还是比较陌生的。我需要从我的@Html传递数据。操作方法通过控制器传递给局部视图。

这是我的流程。

调用@Html。像这样的操作:

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

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

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>

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

从Html传递数据.操作到分部视图

试试这个:

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

并在你的SidebarMain动作设置一个断点,看看你是否得到了items

简而言之:您的代码在Html.Action()中缺少参数名称。除此之外,代码应该是功能性的。

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

作为建议的实践,我会在我的视图中使用专用的ViewModel,而不仅仅是发送整数数组。因为,以这种方式,一个干净的ViewModel -你在视图中显示的属性的容器,你的代码可以在以后添加其他属性,因为我们的代码总是在发展。

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

达斯维德回答得好。您是否将其作为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功能,我为兔子的踪迹道歉:)

达斯维德的建议可能奏效了。这是我最后做的:

1)移除控制器

@{Html.RenderPartial("SidebarMain", new int[] {1,3,4,2});}
下面是我的视图代码:
@model int[]
@foreach( int item in Model){
...