我有一个包含此行的_layout.cshtml:
@{Html.RenderPartial("Menu");}
现在我想将一个模型传递给这个RenderPartial函数。可以从我的存储库中读取此模型。
如何以及在哪里(代码中)可以做到这一点?
谢谢!
答案 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
属性确保只能将一个操作方法作为子方法调用。此操作将使用布局中的模型呈现相应的局部视图。