2013-01-20 58 views
3

我还是比较新的MVC 3.我需要通过控制器将我的@ Html.Action方法的数据传递给局部视图。将数据从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> 

但是:我发现了一个空例外模型,意思它没有通过。

+1

为什么downvote没有评论? – abatishchev

回答

4

试试这个:

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

将断点设置在SidebarMain行动看,如果你是从达斯·维达越来越items

0

很好的回答。你是否将它作为Ajax返回?如果您在主视图嵌入它,你应该用

return PartialView("SidebarMain", model); 

返回它作为一个PartialView这是SidebarMain是,你正在返回的局部视图的名称。请结合DarthVader的建议尝试此操作,并确保您获得模型以返回到视图。

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

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

这将让你留在您的当前页面上。如果你是不是在找Ajax功能,我的兔子线索:)

1

总之道歉:你的代码是在Html.Action()缺少项目参数名称。 除此之外,代码应该是功能性的。

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

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

参考的视图模型概念的使用:Exercise 5: Creating a View Model

+0

只是为了澄清,通过ViewModel你的意思是一个模型,该视图在正确的强类型? –

+0

是的,你说得对,这一点试图在我的第二段中加以澄清/提及。 –

+1

谢谢你。我没有意识到参数名称必须在视图中与控制器中的相同。 – coggicc

0

达斯·维达的建议可能会奏效。这是我落得这样做:

1)删除时调用它像这样的控制器

2):

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

3)这是我的看法代码:

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