gpt4 book ai didi

c# - ASP.NET MVC 如何在布局中使用分部 View ?

转载 作者:行者123 更新时间:2023-11-30 19:38:46 25 4
gpt4 key购买 nike

我需要使用局部 View 在布局中呈现菜单(如果有更好的方法,请告诉我)。我这样做(在布局中):

 @if (User.IsInRole("Admin"))
{
@Html.Partial("AdminMenu")
}

这就是我在 Controller 中的调用方式:

public ActionResult AdminMenu()
{
var am = _amr.GetAdminMenu();
return PartialView(am);
}

所以这是我的部分观点:

@model IEnumerable<DigitalHubOnlineStore.ViewModels.AdminMenuViewModel>

<div class="dropdown">
<button class="btn btn-default dropdown-toggle" type="button" id="dropdownMenu1" data-toggle="dropdown" aria-haspopup="true" aria-expanded="true">
Admin menu
<span class="caret"></span>
</button>
<ul class="dropdown-menu" aria-labelledby="dropdownMenu1">
@foreach (var item in Model)
{
<li><a href="@Html.DisplayFor(modelItem => item.MenuItemUrl)">@Html.DisplayFor(modelItem => item.MenuItemName)</a></li>
}
</ul>
</div>

很遗憾,它无法正常工作。

最佳答案

你需要使用

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

Html.Partial 仅将 View 作为字符串返回,不会将其写入响应,因此仅调用它什么都不做,返回的字符串超出范围。它存在的原因是您可以将局部 View 呈现为字符串,然后将字符串插入多个位置,而无需多次呈现局部 View 。例如,如果您希望相同的分页标记位于页面的顶部和底部。或者,您可能想要复制一个 Tab Partial View 以创建多个选项卡,等等。

要让你当前的代码工作,试试这个

Model ......
@{
Layout=.....
var adminMenu = Html.Partial("Admin");
}
@if (User.IsInRole("Admin"))
{
Html.Raw(adminMenu);
}

Html.RenderPartial 做同样的事情,但在内部调用 Write 将其写入响应。

现在如果你的 Partial 正在接受一个模型,那么你需要给它一个 Controller 方法,

[ChildActionOnly]
public ActionResult AdminMenu(AdminMenuViewModel model)
{
return Partial(model);
}

然后将您的调用代码更新为,

 @{Html.RenderAction("AdminMenu", "ControllerHere", new { model = TheAdminViewModelHere });}

我个人更喜欢将 ChildOnlyAction 用于我的部分 View ,因为我可以将所有处理逻辑移动到部分 View 的 Controller 中,这样性能更好。它还允许局部 View 了解有关其父上下文的信息,因为它允许您访问 Controller 以将信息添加到模型以传递给局部 View 。

关于c# - ASP.NET MVC 如何在布局中使用分部 View ?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31410586/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com