ASP.NET MVC 3中的条件布局

6

那么在MVC3中使用布局,如果我想在页面级别上指定是否显示特定部分,最好的方法是什么?考虑以下页面:

@{
     ViewBag.Title = "...";
     Layout = "~/Views/Shared/Layout/_Layout.cshtml";
}

@section LetsBeFriends {

}

@section Header {
    ....
}

@section Body {
    ....
}

为了让“LetBeFriends”部分具有条件性,我已经按照以下方式实现了布局:
@{
        if (IsSectionDefined("LetsBeFriends"))
        {
            @RenderSection("LetsBeFriends")
            @Html.Partial("_LetsBeFriends")
        }
}

@RenderSection("Body")

这种做法似乎有些粗糙,因为LetsBeFriends将始终是一个空的部分,它只是一个条件来决定是否呈现局部内容。有更好的方法吗?

1个回答

8

为什么不使用ViewBag?在您的页面中:

@if (friendsCondition)
{
    ViewBag.LetsBeFriends = true;
}

接下来,在_Layout.cshtml文件中:

@if (Viewbag.LetsBeFriends)
{
    @Html.Partial("_LetsBeFriends")
}

然而,最好的方式是在控制器操作中设置它,而不是视图中。

是的,ViewBag 是最简单的方法。如果条件部分的数量超过了几个,并且/或者可能会增加,那么最好在 Model(甚至更好的是 ViewModel)中设置一些属性,并在视图中使用它们。 - kaps
为了防止空引用异常,我使用以下代码: @if (ViewBag.LetsBeFriends != null && ViewBag.LetsBeFriends) - Amadeusz Wieczorek

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接