Mvc3 - 处理几乎所有请求所需数据的最佳实践是什么?

3

我正在创建一个mvc3应用程序,想知道如何处理所有应用程序请求所需的数据库数据,其中一些依赖于会话,一些依赖于url模式,基本上所有数据都在数据库中。

想了解最佳实践。

4个回答

3

在我的应用程序中,我认为最佳实践是在控制器构造函数中将常见数据加载到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
}

这样,您将始终在视图中使用已登录的用户。


3

我和 @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

3

0
我建议使用一个基本的ViewModel类。这个基类应该包含在任何时候都可用的属性/函数。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接