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

标签 c# asp.net asp.net-mvc asp.net-mvc-4

我需要使用局部 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/

相关文章:

c# - 将 C 结构编码到 C#

c# - 委托(delegate)一个函数,其参数是 native 类型的指针

asp.net - 性能 : asp. 网络缓存与单例

c# - ASP.NET MVC3 : How do I hide fields using Html. DisplayForModel 和 Html.EditorForModel

asp.net-mvc - ASP.NET MVC 框架是否支持异步页面执行?

asp.net-mvc - 如何从 Razor View 访问 My.Resources

c# - 获取给定 XML 元素的所有有效属性

Java DLL 函数 : Connecting to MicroFocus Rumba ehlapi32

asp.net - log4net不在日志文件中写入日志

html - 为什么 Bootstrap Span 类没有出现