繁体   English   中英

将数据从Html.Action传递到局部视图

[英]Passing data from Html.Action to the partial view

我仍然是MVC 3的新手。我需要将我的@ Html.Action方法中的数据通过控制器传递到局部视图。

所以这是我的流程。

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

@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 Action中设置断点,以查看是否有items

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

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

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

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

DarthVader的答案很好。 你是以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功能,我为兔子道路道歉:)

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

1)拆下控制器

2)这样称呼它:

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

3)这是我的查看代码:

@model int[]
@foreach( int item in Model){
...

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM