首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >MVC在每次请求时检索模型

MVC在每次请求时检索模型
EN

Stack Overflow用户
提问于 2008-09-16 00:26:57
回答 3查看 435关注 0票数 0

假设我正在开发一个服务台应用程序,该应用程序将由多个部门使用。应用程序中的每个URL都将包含一个指示特定部门的键。关键字始终是系统中每个操作的第一个参数。例如

代码语言:javascript
复制
http://helpdesk/HR/Members
http://helpdesk/HR/Members/PeterParker
http://helpdesk/HR/Categories
http://helpdesk/Finance/Members
http://helpdesk/Finance/Members/BruceWayne
http://helpdesk/Finance/Categories

问题是,在对每个请求执行的每个操作中,我必须采用此参数,然后根据该键从存储库中检索Helpdesk Department模型。从该模型中,我可以检索成员、类别等列表,这对于每个Helpdesk部门都是不同的。这显然违反了DRY。

我的问题是,我如何创建一个基本控制器,它为我做这件事,以便URL中指定的特定Helpdesk部门对所有派生的控制器都可用,并且我可以只关注操作?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2008-09-17 13:29:51

我在我的一个项目中有一个类似的场景,我倾向于使用ModelBinder而不是使用单独的继承层次结构。您可以创建一个ModelBinder属性来从RouteData获取实体/实体:

代码语言:javascript
复制
public class HelpdeskDepartmentBinder : CustomModelBinderAttribute, IModelBinder {

    public override IModelBinder GetBinder() {
        return this;
    }

    public object GetValue(ControllerContext controllerContext, string modelName, Type modelType, ModelStateDictionary modelState) {
        //... extract appropriate value from RouteData and fetch corresponding entity from database. 
    }
}

...then您可以使用它来使HelpdeskDepartment可用于您的所有操作:

代码语言:javascript
复制
public class MyController : Controller {
    public ActionResult Index([HelpdeskDepartmentBinder] HelpdeskDepartment department) {
        return View();
    }
}
票数 2
EN

Stack Overflow用户

发布于 2008-09-16 00:53:01

免责声明:我目前运行的是MVC Preview 5,所以其中一些可能是新的。

最佳实践方法:只需实现一个静态实用程序类,该类提供一个执行模型查找的方法,并将来自操作的RouteData作为参数。然后,从需要该模型的所有操作中调用此方法。

笨拙的方式,因为只有当每个控制器中的每个操作都需要模型时,并且您真的不希望在操作中有额外的方法调用:在您的控制器实现基类中,覆盖ExecuteCore(),使用RouteData填充模型,然后调用base.ExecuteCore()。

票数 0
EN

Stack Overflow用户

发布于 2008-09-16 13:42:45

您可以通过正常的C#继承创建一个基本控制器类:

代码语言:javascript
复制
public abstract class BaseController : Controller 
{
}

public class DerivedController : BaseController 
{
}

您只能将此基类用于需要部门的控制器。无需执行任何特殊操作即可实例化派生控制器。

从技术上讲,这工作得很好。然而,从设计的角度来看,这存在一些风险。如果,正如您所说,所有的控制器都需要一个部门,这是很好的。如果他们中的一些人需要一个部门,它可能仍然是好的。但是,如果一些控制器需要一个部门,而其他控制器需要一些其他继承的行为,并且这两个子集相交,那么您可能会发现自己遇到了多重继承问题。这表明继承不是解决您所陈述的问题的最佳设计。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68234

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档