【问题标题】:How to pass data to a PartialView in my layout?如何将数据传递到我的布局中的部分视图?
【发布时间】:2011-09-30 08:41:32
【问题描述】:

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

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

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

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

谢谢!

【问题讨论】:

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


    【解决方案1】:

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

    @Html.RenderPartial("ViewName",object)

    额外信息:MSDN

    评论后编辑:

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

    所以你会在你的 _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
           })
    }
    

    这更接近解决方案吗?

    【讨论】:

    • 我知道,但我在我的 layout.cshtml 文件中。我在哪里从存储库中读取我的模型?
    【解决方案2】:

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

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

    在你的控制器中:

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

    ChildActionOnly 属性确保动作方法只能作为子方法调用。这个动作会在 Layout 中渲染对应的带有模型的局部视图。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-05-07
      • 1970-01-01
      相关资源
      最近更新 更多