有啥方法可以为我的 _Layout 创建特殊的控制器?

Posted

技术标签:

【中文标题】有啥方法可以为我的 _Layout 创建特殊的控制器?【英文标题】: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) 定义一个没有在每个视图中执行这些例程的自定义控制器。有什么通用的方法可以实现吗?

【问题讨论】:

【参考方案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 代替部分来指定控制器和操作。该操作应返回一个局部视图,然后将其集成到调用站点中。

【讨论】:

以上是关于有啥方法可以为我的 _Layout 创建特殊的控制器?的主要内容,如果未能解决你的问题,请参考以下文章

将列表存储在数据库中的解决方法 - 有啥想法吗?

Python中__init__()和self的有啥用

对于具有不同纵横比的响应式图像,有啥方法可以最小化 Cumulative Layout Shift?

根据控制器指定不同的_Layout.cshtml

有啥方法可以扩展 chrome 的 __commandLineAPI

有啥方法可以让我的 ps4 控制震动/隆隆声?用java