ASP.NET MVC如何在布局中使用PartialView? [英] ASP.NET MVC How to use PartialView in Layout?

查看:255
本文介绍了ASP.NET MVC如何在布局中使用PartialView?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我需要使用局部视图在Layout中渲染菜单(如果有更好的方法,请告诉我).我是这样(在布局中)的:

I need to render menu in Layout by using partial view (if there is better approach, please let me know). I'm doing it this way (in Layout):

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

这就是我在Controller中的称呼方式:

And this how I call this in 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>

不幸的是,它不起作用.

Unfortunately it's not working.

推荐答案

您要么在父视图中返回菜单集合,将相关模型发送到Partial,要么从您的HtmlForm,AjaxForm或ajax调用部分.

You either have to return the menu collection in the parent view, sending in the pertinent model to the Partial, or make another HtmlForm, AjaxForm or ajax call from your partial.

@Html.Partial("Partials/AdminMenu",Model.AdminMenuItems)

OR

//SERVER
  public ActionResult AdminMenu()
  {
      var am = _amr.GetAdminMenu();
      return Json(am,JsonBehaviour.AllowGet);
  }



  //CLIENT
    @using (Ajax.BeginForm("AdminMenu","AdminController", null,  
        new AjaxOptions
        {
            OnSuccess = "renderSuccess",
            OnFailure = "renderFailure",
            OnBegin = "renderBegin"
        },
        new
        {
            id = "frmViewerAdminMenu",
            name = "frmViewerAdminMenu"
        })
    )
    {
    ...

        <script type="text/javascript">
            function renderSuccess(ajaxContext){
               /// ajaxContext is whatever comes back from GetAdminMenu()
            }
        </script>
     ...
    }

OR

-服务器渲染视图

public ActionResult AdminMenuRenderView()
{
    return Partial("AdminMenuPartial",GetAdminMenuItems());
}

-部分AdminMenuViewDynamicLoader

 @using (Ajax.BeginForm("AdminMenuRenderView","AdminController", null,  
    new AjaxOptions
    {
        OnSuccess = "renderSuccess",
        OnFailure = "renderFailure",
        OnBegin = "renderBegin"
    },
    new
    {
        id = "frmViewerAdminMenu",
        name = "frmViewerAdminMenu"
    })
)
{
...
    <div id="divAdminMenuContent"></div>

    <script type="text/javascript">
        function renderSuccess(ajaxContext){
            $('#divAdminMenuContent').html(ajaxContent);
        } 
    </script>
 ...
}

-部分AdminMenuPartial

@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>

这篇关于ASP.NET MVC如何在布局中使用PartialView?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆