C# MVC应用程序加载通知

C# MVC应用程序加载通知,c#,asp.net-mvc,design-patterns,C#,Asp.net Mvc,Design Patterns,我打算从WrapBootstrap购买一个个人项目的MVC主题 在设计方面,我喜欢它的很多方面,但它提出了一个问题,即在标题中加载通知的最佳方式(实际上是需要加载到公共布局视图中的任何类型的动态数据) 我知道有很多方法可以做到这一点,但在我的开发经验中,我正试图打破我的坏设计习惯(把东西拼凑在一起,让它们“正常工作”),并在我能找到的地方寻找优雅的解决方案 到目前为止,最有意义的事情是: 1) 创建一个全局ActionFilter,它将过滤所有请求并将“LayoutViewModel”抛出到Vi

我打算从WrapBootstrap购买一个个人项目的MVC主题

在设计方面,我喜欢它的很多方面,但它提出了一个问题,即在标题中加载通知的最佳方式(实际上是需要加载到公共布局视图中的任何类型的动态数据)

我知道有很多方法可以做到这一点,但在我的开发经验中,我正试图打破我的坏设计习惯(把东西拼凑在一起,让它们“正常工作”),并在我能找到的地方寻找优雅的解决方案

到目前为止,最有意义的事情是:

1) 创建一个全局ActionFilter,它将过滤所有请求并将“LayoutViewModel”抛出到ViewBag中,只需在_Layout视图中使用ViewBag即可

  • 我宁愿做一些强类型的事情,但我看不出有什么办法
  • 这很好,因为它是可用的,不需要我的控制器从基类继承任何可能很笨拙的功能,甚至不需要知道它正在发生
2) 加载页面并进行onLoad,只需对服务器执行Ajax调用即可加载所需的任何动态数据

  • 如果您的布局需要根据数据进行更改,这可能会有一些缺点。我不喜欢加载后页面上到处都是东西
是否有一个设计模式或MVC功能我可能会错过完成这一点

将来我可能会实现类似于SignalR(或者一个简单的定时ajax调用来查找更新)的东西来获取更新的数据/通知,但现在我只关注初始页面加载


感谢您提出的任何想法。

最有可能的是,您正在寻找的是儿童行动。这些操作与普通操作非常相似,只是它们将返回部分视图,并且通常使用
[ChildActionOnly]
进行修饰,以防止通过URL栏路由到它们

[ChildActionOnly]
public ActionResult Notifications()
{
    var notifications = // get the notifications;
    return PartialView("_Notifications", notifications);
}
然后,在布局中,只需在希望显示的位置添加以下内容:

@Html.Action("Notifications", "Foo")

其中
“Foo”
是您将此子操作放入的控制器的名称。我有一个可以提供剃须刀模板系统入门的工具,它也可能对您有用。

这可能正是我所需要的。我很惊讶,我从来没有遇到过这种情况,即使是在事故中。显然,我的谷歌fu没有我想象的那么强大。我会调查它,如果它符合我的需要,我会标记为答案。非常感谢!使用子操作时的几个注意事项。1) 因为它们不是真实的动作,所以不能重定向,特别是对于登录之类的事情。如果您将它们与Authorize一起使用,那么还应该使用AllowAnonymous,否则会出现问题。2) 不幸的是,它们不能是异步的,所以您只需要在内部使用同步方法。