如何将数据传递到我的布局中的部分视图?

时间:2011-09-30 08:41:32

标签: asp.net-mvc-3 razor partial-views

我有一个包含此行的_layout.cshtml:

@{Html.RenderPartial("Menu");}

现在我想将一个模型传递给这个RenderPartial函数。可以从我的存储库中读取此模型。

如何以及在哪里(代码中)可以做到这一点?

谢谢!

2 个答案:

答案 0 :(得分:3)

RenderPartial有一个重载,可以将对象发送到局部视图。 不要忘记在部分视图的顶部定义@model以使用正确的对象类型。

@ Html.RenderPartial( “VIEWNAME”,对象)

额外信息:MSDN

评论后修改:

我认为创建一个接收存储库的MenuController会更容易。然后让它创建一个视图,它接收所需的存储库作为它的模型,然后使用foreach将每个菜单项呈现为actionlinks,将菜单信息传递给它。

所以你在_layout.cshtml中会有这个:

<div id="Menu">
    @{Html.RenderAction("Menu", "Menu");}
</div>

这在你的MenuController中:

public class MenuController : Controller
{
    private IMenuRepository _repository;

    public MenuController(IMenuRepository repo)
    {
        _repository = repo;
    }
    //
    // GET: /Menu/

    public PartialViewResult Menu(string menu = null)
    {
        ViewBag.SelectedMenu = menu;

        IEnumerable<MenuInfoObject> menus= _repository.Menus;
        return PartialView(menus);
    }
}

和你的MenuView:

    @model IEnumerable<MenuInfoObject>
@{
    Layout = null;
}
@foreach (var item in Model)
{
    @Html.RouteLink(item.MenuName, new
{
    controller = item.ControllerInfo,
    action = item.ActionInfo,
}, new
       {
           @class = item.Menu == ViewBag.SelectedMenu ? "selected" : null
       })
}

那会更接近解决方案吗?

答案 1 :(得分:0)

还有另一种解决方案可以将数据传递到布局中的局部视图。您只需在_Layout.cshtml文件中添加它

即可
@Html.Action("ActionName","ControllerName")

在你的控制器中:

    [ChildActionOnly]
    public ActionResult ActionName()
    {
        var model = new YourModel();
        return PartialView(model);

    }

ChildActionOnly属性确保只能将一个操作方法作为子方法调用。此操作将使用布局中的模型呈现相应的局部视图。