【问题标题】:Update partial view in controller更新控制器中的部分视图
【发布时间】:2018-08-19 18:26:08
【问题描述】:

我正在使用 asp.net MVC5 开发一个新项目。在这个项目中,我有无限的类别和无限的子类别。

我想将我的类别 + 类别子项转换为菜单。我知道我可以在基本控制器上创建这些菜单,但我不喜欢总是呈现类别。

我决定创建一个像 _MenuPartial.cshtml 这样的局部视图,并在用户创建新类别或更新时生成菜单,对于最新的步骤,我在我的布局中呈现这个局部视图。

我找不到适合这种情况的任何资源。

我可以在控制器中将字符串转换为部分视图吗?还是我必须创建一个 txt 文件并将我的菜单保存在那里并每次都将其转换为 HTML?

【问题讨论】:

  • 步骤 1) 在局部视图中编写菜单的 HTML,并根据需要将其包含在其他视图中。
  • @Shyju 我知道如何使用局部视图,但是如何在控制器的局部视图中生成 html?
  • 如何确定是否需要菜单?

标签: c# asp.net-mvc asp.net-mvc-partialview


【解决方案1】:

对于这种情况,我建议您创建一个用于呈现菜单的操作。然后你可以在任何你想要渲染的地方使用它。例如在你的Home.cshml

你的动作控制器应该是这样的:

public PartialViewResult MainMenu()
{
   List<YourApp.Models.Menu> menuItems = new List<YourApp.Models.Menu>();

   /* Add your menus item here */

   menuItems.Add(
        new YourApp.Models.Menu() {
            Title = "Level 1",
            SubItems = new List<YourApp.Models.Menu>() {
                new YourApp.Models.Menu() {
                    Title = "Level 2",
                    SubItems = new List<YourApp.Models.Menu>() {
                        new YourApp.Models.Menu() {
                            Title = "Level 3",
                            Url = Url.Action("SampleAction", "SampleController")
                        }
                    }
                }
            }
        }
   );
   return PartialView("~/Views/Shared/MainMenu", menuItems);
}

下面是使用引导框架制作菜单的MainMenu.cshtml 视图示例:

@model YourApp.Models.Menu;

<div class="navbar-collapse collapse navbar-right">
    <ul class="nav navbar-nav" style="font-weight:bold;">
        @* Create a for loop on first level of menu model *@
        @foreach(var firstLevel in Model){
            <li class="dropdown">
                <a href="#" class="dropdown-toggle" data-toggle="dropdown">@(firstLevel.Title)
                    <b class="caret"></b>
                </a>
                <ul class="dropdown-menu">
                    @* Iterate on children of first level items *@
                    @foreach(var secondLevel in firstLevel.SubItems){
                        <li class="dropdown">
                            <a href="#" class="dropdown-toggle" data-toggle="dropdown">@(secondLevel.Title)
                                <b class="caret"></b>
                            </a>
                            <ul class="dropdown-menu">
                                @foreach(var thirdLevel in secondLevel.SubItems){
                                    <li><a href="@(thirdLevel.Url)">@(thirdLevel.Title)</a></li>
                                }
                            </ul>
                        </li>
                    }
                </ul>
            </li>
        }
    </ul>
</div>

您可以调用此代码并在您的视图中呈现MainMenu.cshtml(例如Home.cshtmlIndex.cshtml):

@Html.Action("MainMenu", "Home")

【讨论】:

    猜你喜欢
    • 2015-11-30
    • 2023-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-13
    相关资源
    最近更新 更多