【问题标题】:Is there any way to create special controller for my _Layout?有什么方法可以为我的 _Layout 创建特殊的控制器?
【发布时间】:2013-09-01 18:08:48
【问题描述】:

我正在开发一个网站,该网站在 View\Shared 文件夹中有一个名为 _MainPage 的视图,其他视图将其用于我网站的基本布局,因此我在此视图中有一个部分,实际上是从数据库填充数据的部分是网站的最新消息,我应该在这个部分显示最新消息,简单来说,我应该创建一个名为 latestNews 的部分:

<ul class="news-list">
    @RenderSection("latestNews",required:false)
</ul>

在每个视图中,我都应该用剃刀来填写这部分数据来自相关控制器:

@foreach (var item in Model.News)
{
    <div>
        <p>@Html.Raw(item.Body)<br /><a href="#">ادامه مطلب</a></p>
    </div>
}

事实上,我在页面页脚的每个视图中都有最新消息。

现在我的问题是:如何为我的视图 (_MainPage) 定义一个没有在每个视图中执行这些例程的自定义控制器。有什么通用的方法可以实现吗?

【问题讨论】:

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


    【解决方案1】:

    控制器类中的任何公共方法都是操作方法。控制器类中的每个操作方法都可以通过 Web 浏览器中的 URL 或应用程序中的视图页面调用。

    您的场景是一些动态信息(数据)需要显示在应用程序的几个页面上。通常,我们最终会将该数据添加到通过操作方法传递给视图的模型中。我们在遵循 DRY(不要重复自己)原则的多个模型中复制相同的数据。

    为了处理这种情况,ASP.NET MVC 提供了子操作方法。任何动作方法都可以是子动作方法,但子动作是从视图中调用的动作方法,您不能通过用户请求(URL)调用子动作方法。

    我们可以用[ChildActionOnly] 属性注释一个动作方法来创建一个子动作。通常我们使用带有部分视图的子操作方法,但不是每次都使用。

    [ChildActionOnly] 表示一个属性,用于指示动作方法只能作为子动作调用。

    [ChildActionOnly]
    public ActionResult GetNews(string category)
    {
        var newsProvider = new NewsProvider();
        var news = newsProvider.GetNews(category);
        return View(news);
    }
    

    可以使用Html.RenderAction()Html.Action() 方法在应用程序的任何视图内调用上述子操作方法。

    @Html.Action("GetNews", "Home", new { category = "Sports"})
    

    (或)

    @{ Html.RenderAction("GetNews", "Home", new { category = "finance"}); }
    

    【讨论】:

      【解决方案2】:

      您可以使用Html.RenderAction 代替部分来指定控制器和操作。该操作应返回一个局部视图,然后将其集成到调用站点中。

      【讨论】:

        猜你喜欢
        • 2017-05-14
        • 2011-09-06
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-09-06
        • 2013-04-10
        • 1970-01-01
        • 2021-11-13
        相关资源
        最近更新 更多