Asp.net mvc 4 如何抑制MVC4应用程序主页上的导航?

Asp.net mvc 4 如何抑制MVC4应用程序主页上的导航?,asp.net-mvc-4,Asp.net Mvc 4,我在VS 2012中使用标准MVC4模板。它附带了一个_layout.cshtml文件,如下所示: <!DOCTYPE html> <html lang="en"> <head> <meta charset="utf-8" /> <title>@ViewBag.Title - iLoveSport</title> <link href="~/favicon.ico" rel="shortcut

我在VS 2012中使用标准MVC4模板。它附带了一个_layout.cshtml文件,如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - iLoveSport</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/kendo")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/kendo")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <header>
        <div class="content-wrapper">
            <div class="float-left">
               <img src="~/Images/logo.png" alt="ILoveSport Logo" />
            </div>
            <div class="float-right">
                <section id="login">

                </section>
                <nav>
                    <ul id="menu">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("AFL", "Index", "AFL")</li>
                        <li>@Html.ActionLink("NRL", "Index", "NRL")</li>
                        <li>@Html.ActionLink("State of Origin", "Index", "State of Origin")</li>
                        <li>@Html.ActionLink("Cricket", "Index", "Cricket")</li>
                        <li>@Html.ActionLink("Golf", "Index", "Gof")</li>
                        <li>@Html.ActionLink("Motorsport", "index", "Motorsport")</li>

                        <li>@Html.ActionLink("About", "About", "Home")</li>
                        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <div id="body">
        @RenderSection("featured", required: false)
        <section class="content-wrapper main-content clear-fix">
            @RenderBody()
        </section>
    </div>
    <footer>
        <div class="content-wrapper">
            <div class="float-left">

            </div>
        </div>
    </footer>

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>
[ChildActionOnly]
    public ActionResult NavigationMenu()
    {
        string controller = ControllerContext.
            ParentActionViewContext.RouteData.Values["controller"].ToString();
        string action = ControllerContext.
            ParentActionViewContext.RouteData.Values["action"].ToString();

        if (controller == "Home" && action == "Index")
            return Content("");
        else
            return PartialView("_Menu");
    }
<nav>
@Html.Action("NavigationMenu","Partial")
</nav>
必须修改哪些内容才能使my_layout.cshtml页面中的导航仅在主页上被抑制?主页需要有一个按钮,然后触发当前为我的主页的内部页面。我是否创建了一个新的布局文件来抑制菜单并更改viewstart以加载它?或者,这可以通过其他方式实现吗

谢谢你的帮助和指导

更新:
我的家庭控制器现在如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - iLoveSport</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/kendo")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/kendo")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <header>
        <div class="content-wrapper">
            <div class="float-left">
               <img src="~/Images/logo.png" alt="ILoveSport Logo" />
            </div>
            <div class="float-right">
                <section id="login">

                </section>
                <nav>
                    <ul id="menu">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("AFL", "Index", "AFL")</li>
                        <li>@Html.ActionLink("NRL", "Index", "NRL")</li>
                        <li>@Html.ActionLink("State of Origin", "Index", "State of Origin")</li>
                        <li>@Html.ActionLink("Cricket", "Index", "Cricket")</li>
                        <li>@Html.ActionLink("Golf", "Index", "Gof")</li>
                        <li>@Html.ActionLink("Motorsport", "index", "Motorsport")</li>

                        <li>@Html.ActionLink("About", "About", "Home")</li>
                        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <div id="body">
        @RenderSection("featured", required: false)
        <section class="content-wrapper main-content clear-fix">
            @RenderBody()
        </section>
    </div>
    <footer>
        <div class="content-wrapper">
            <div class="float-left">

            </div>
        </div>
    </footer>

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>
[ChildActionOnly]
    public ActionResult NavigationMenu()
    {
        string controller = ControllerContext.
            ParentActionViewContext.RouteData.Values["controller"].ToString();
        string action = ControllerContext.
            ParentActionViewContext.RouteData.Values["action"].ToString();

        if (controller == "Home" && action == "Index")
            return Content("");
        else
            return PartialView("_Menu");
    }
<nav>
@Html.Action("NavigationMenu","Partial")
</nav>
My_layout.cshtml如下所示:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title - iLoveSport</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Styles.Render("~/Content/css")
    @Styles.Render("~/Content/kendo")
    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/kendo")
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    <header>
        <div class="content-wrapper">
            <div class="float-left">
               <img src="~/Images/logo.png" alt="ILoveSport Logo" />
            </div>
            <div class="float-right">
                <section id="login">

                </section>
                <nav>
                    <ul id="menu">
                        <li>@Html.ActionLink("Home", "Index", "Home")</li>
                        <li>@Html.ActionLink("AFL", "Index", "AFL")</li>
                        <li>@Html.ActionLink("NRL", "Index", "NRL")</li>
                        <li>@Html.ActionLink("State of Origin", "Index", "State of Origin")</li>
                        <li>@Html.ActionLink("Cricket", "Index", "Cricket")</li>
                        <li>@Html.ActionLink("Golf", "Index", "Gof")</li>
                        <li>@Html.ActionLink("Motorsport", "index", "Motorsport")</li>

                        <li>@Html.ActionLink("About", "About", "Home")</li>
                        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
                    </ul>
                </nav>
            </div>
        </div>
    </header>
    <div id="body">
        @RenderSection("featured", required: false)
        <section class="content-wrapper main-content clear-fix">
            @RenderBody()
        </section>
    </div>
    <footer>
        <div class="content-wrapper">
            <div class="float-left">

            </div>
        </div>
    </footer>

    @Scripts.Render("~/bundles/jquery")
    @RenderSection("scripts", required: false)
</body>
</html>
[ChildActionOnly]
    public ActionResult NavigationMenu()
    {
        string controller = ControllerContext.
            ParentActionViewContext.RouteData.Values["controller"].ToString();
        string action = ControllerContext.
            ParentActionViewContext.RouteData.Values["action"].ToString();

        if (controller == "Home" && action == "Index")
            return Content("");
        else
            return PartialView("_Menu");
    }
<nav>
@Html.Action("NavigationMenu","Partial")
</nav>

此错误在layout.cshtml文件中引发。如何解决此问题?

您可以将导航菜单定义为局部视图。并在布局中渲染此局部视图

在这个局部视图的action方法中,您可以检查控制器和操作。如果是您的主页,您可以返回空内容。否则,返回导航菜单

局部视图

<nav>
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
        <li>@Html.ActionLink("AFL", "Index", "AFL")</li>
        <li>@Html.ActionLink("NRL", "Index", "NRL")</li>
        <li>@Html.ActionLink("State of Origin", "Index", "State of Origin")</li>
        <li>@Html.ActionLink("Cricket", "Index", "Cricket")</li>
        <li>@Html.ActionLink("Golf", "Index", "Gof")</li>
        <li>@Html.ActionLink("Motorsport", "index", "Motorsport")</li>

        <li>@Html.ActionLink("About", "About", "Home")</li>
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
</nav>
@Html.Action("NavigationMenu", "Partial")
渲染局部视图

<nav>
    <ul id="menu">
        <li>@Html.ActionLink("Home", "Index", "Home")</li>
        <li>@Html.ActionLink("AFL", "Index", "AFL")</li>
        <li>@Html.ActionLink("NRL", "Index", "NRL")</li>
        <li>@Html.ActionLink("State of Origin", "Index", "State of Origin")</li>
        <li>@Html.ActionLink("Cricket", "Index", "Cricket")</li>
        <li>@Html.ActionLink("Golf", "Index", "Gof")</li>
        <li>@Html.ActionLink("Motorsport", "index", "Motorsport")</li>

        <li>@Html.ActionLink("About", "About", "Home")</li>
        <li>@Html.ActionLink("Contact", "Contact", "Home")</li>
    </ul>
</nav>
@Html.Action("NavigationMenu", "Partial")

我还没有测试代码,但大部分都应该可以。

动作方法应该放在Home Controller中还是放在新的MenuController中?在您的情况下,我认为将其放在Home Controller下更合理,因为它只在你的主页上使用。因为你处理的是浏览量,我不明白为什么你需要为此做一个儿童动作。只要在布局文件中有一个if语句来使用适当的局部视图,就可以了。但是,您应该决定什么决定了主页。根URL(~/)或控制器/操作(主/索引),由于路由原因,两者可能不相同<代码>@if(ViewContext.RouteData.Values[“Controller”]=“Home”&&ViewContext.RouteData.Values[“Action”]=“Index”){@Html.Partial(“NavMenu”)}或
@if(Request.Url.AbsolutePath=“/”{@Html.Partial(“NavMenu”)}