我有一个母版页,需要显示我的数据库中的一些数据。作为一个例子,我在页面中有一个标题,它将显示用户拥有的消息/警报的数量。每个控制器都需要将这些数据传递给View。在MVC应用程序中执行此操作的最佳方法是什么?我显然不想在每个控制器操作中复制代码。MVC主页动态数据
1
A
回答
2
Darin的答案替代方案是ActionFilterAttribute
,它将数据压入每个Action的ViewData。放置属性的位置定义了哪些操作可以实现此目的。将它放在根控制器类上意味着所有操作都会得到它。
3
您可以使用子操作。 Phil Haack在这个blog post中做了很好的解释。通过这种方式,您将拥有一个特定的控制器,用于从存储库中获取数据并将其传递到其自己的部分视图。然后在您的主页面中,您只需包含以下操作:
<%= Html.Action("index", "somecontroller") %>
这样其他控制器不需要将数据传递到视图。它有一个完全独立的生命周期。
2
你可以有所有机型继承模型:
public abstract class MasterModel
{
public int NumberOfMessages { get; set; }
public string Username { get; set; }
}
然后,你可能有某种模型厂将创建被请求的模型:
public class ModelFactory : IModelFactory
{
private IUserRepository userRepository;
public ModelFactory(IUserRepository userRepository)
{
// Inject a repository .. or a service...
this.userRepository = userRepository;
}
public T Create<T>() where T : MasterModel, new()
{
var m = new T()
{
NumberOfMessages = this.userRepository.GetNumberMessages(currentUser) // Get current user somehow... HttpContext
};
return m;
}
}
,那么你” d将IModelFactory注入控制器,然后在动作中使用它:
[HttpGet]
public ViewResult DoSomething()
{
var model = this.modelFactory.Create<MyActionModel>();
return View(model);
}
Th您的主人有MasterModel
模型类型,然后可以使用此信息。这样,所有的逻辑都可以保存在注入工厂的服务/存储库中,从而创建每个视图的模型。这就是我所做的事情,它的成效非常好。
相关问题
- 1. ASP.NET MVC主页数据
- 2. 动态主页面声明 - ASP.NET MVC
- 3. ASP.NET,MVC和动态数据
- 4. 从MVC应用程序的数据库动态加载主页面
- 5. 传递数据到主页在ASP.NET MVC
- 6. ASP.Net动态切换主页
- 7. MVC 5,从数据库创建动态页面/视图
- 8. jQuery的数据表服务器端分页mvc动态列
- 9. ASP.NET MVC:在主页面中动态链接到CSS样式表
- 10. asp.net mvc动态数据文章
- 11. MVC如何创建动态数据表?
- 12. ASP .NET MVC 2:动态主题
- 13. ASP.NET MVC主页面
- 14. JQuery,MVC和主页
- 15. 如何动态刮取页面数据?
- 16. jQuery的数据表动态分页
- 17. Drupal在动态页面插入数据
- 18. 动态网页中的http数据包
- 19. 动态元数据和页面描述
- 20. 动态启用数据表分页
- 21. 提供动态数据到网页
- 22. jquery Ajax分页Next/Prev - 动态数据
- 23. WordPress的静态主页动态帖子页面URL重写
- 24. Asp.net Mvc:动态页面标题
- 25. 动态页面标题Thymeleaf Spring MVC
- 26. 弹簧mvc:动态404页面
- 27. 在asp.net中创建动态页面mvc
- 28. asp.net mvc动态更改母版页&.css
- 29. 带动态模板的主页
- 30. 在主页面中动态加载PHP
我想我会尝试这种方法反对尝试儿童行动。我不喜欢模型工厂解决方案,因为我不认为每个模型都必须从基础模型类继承。 – Dismissile 2010-12-15 16:43:33