我正在创建一个mvc3应用程序,想知道如何处理所有应用程序请求所需的数据库数据,其中一些依赖于会话,一些依赖于url模式,基本上所有数据都在数据库中。
想了解最佳实践。
我正在创建一个mvc3应用程序,想知道如何处理所有应用程序请求所需的数据库数据,其中一些依赖于会话,一些依赖于url模式,基本上所有数据都在数据库中。
想了解最佳实践。
在我的应用程序中,我认为最佳实践是在控制器构造函数中将常见数据加载到ViewBag中。
对于每个项目,我都有一个抽象的DefaultController类,它扩展了Controller。因此,该项目中的每个控制器都必须从DefaultController继承,而不是从Controller继承。在该类的构造函数中,我加载整个项目所需的所有通用数据,如下所示:
// DefaultController.cs
public abstract class DefaultController : Controller
{
protected IRepository Repo { get; private set; }
protected DefaultController(IRepository repo)
{
Repo = repo;
ViewBag.CurrentUser = GetLoggedInUser();
}
protected User GetLoggedInUser()
{
// your logic for retrieving the data here
}
}
// HomeController.cs
public class HomeController : DefaultController
{
public HomeController(IRepository repo) : base(repo)
{
}
// ... your action methods
}
这样,您将始终在视图中使用已登录的用户。
我和 @rdumont 做的一样,但有一个例外:我创建了一个 CommonViewModel
,用于定义我使用的所有公共属性。
public class CommonViewModel
{
public string UserName {get;set;}
public string Extension {get;set; }
}
在基础控制器中声明一个属性:
public abstract class BaseController : Controller
{
protected CommonViewModel Commons { get; private set; }
protected virtual void OnResultExecuting(ResultExecutingContext filterContext)
{
ViewBag.Commons = Commons;
}
}
ViewBag.Commons
强制转换为 CommonViewModel
。