从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.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){
...