有啥方法可以为我的 _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 创建特殊的控制器?的主要内容,如果未能解决你的问题,请参考以下文章
对于具有不同纵横比的响应式图像,有啥方法可以最小化 Cumulative Layout Shift?