在Razor Helper中使用@section

时间:2014-04-10 02:00:36

标签: c# asp.net-mvc-4 razor html-helper

我们正在尝试将布局的各个部分设置为必需,但可以根据各个页面进行配置。目前我们使用Section进行此操作。

@section FloatingNav {
    <h1>@Model.Name <span class="release-year">@Model.AverageRating</span></h1>
    <ul class="sub-nav">
        <li class="active"><a href="#episodes">Episodes</a></li>
        <li><a href="#episodes">Cast</a></li>
        <li>Reviews</li>
        <li>Related</li>
    </ul>
}

这要求您在每个新页面中设置此块,但我希望使用部分默认值和选项来更轻松地使用部分视图进行配置。我本来希望设置一个像这样的Razor助手。

@using System.Web.Mvc.Html
@helper FloatingNav(string name, int rating) {
    @section FloatingNav {
        <h1>
            name <span class="release-year">rating</span></h1>
        <ul class="sub-nav">
            <li class="active"><a href="#episodes">Episodes</a></li>
            <li><a href="#episodes">Cast</a></li>
            <li>Reviews</li>
            <li>Related</li>
        </ul>
    }
}
@helper FloatingNav(System.Web.Mvc.HtmlHelper html, string viewName) {
    @section FloatingNav {
        @html.Partial(viewName)
    }
}
@helper FloatingNav(System.Web.Mvc.HtmlHelper html, string viewName, object model) {
    @section FloatingNav {
        @html.Partial(viewName, model)
    }
}

因此实现的语法类似于

@Layout.FloatingNav(@Model.Name, @Model.AverageRating)

@Layout.FloatingNav("_SimpleNav", @Model)

问题是,似乎Razor Helpers不理解部分语法。有没有办法在Razor Helpers中包含部分?

1 个答案:

答案 0 :(得分:4)

我认为这是不可能的。

@helper@section语法是编译页面的特殊指令。

HelperResult(帮助者)不知道如何定义部分。

DefineSection方法属于WebPageBase

你可能必须从不同的方向来看待这个问题。使用部分视图而不是助手可能会解决这个问题。