单CRUD控制器,适用于不同型号和视图

时间:2013-07-02 11:51:42

标签: asp.net-mvc asp.net-mvc-3 entity-framework

我正在使用Entity Framework开发ASP.NET MVC 3项目。

我正在创建一个包含不同子页面的管理页面。这些页面仅用于配置不同模型的属性。我的所有视图都是强类型的,因此每个视图都会向控制器发回某种类型的对象。由于控制器对每个模型和视图执行相同的操作,并且我有许多模型,我只想维护一个单独的控制器而不进行复制,只更改方法签名和其他一些东西

我总是通过帖子请求设置类别变量来保存我当前所在的子页面,并检测我需要读取或插入/删除的模型数据。我对read方法没有任何问题:

public ActionResult Read([DataSourceRequest] DataSourceRequest request, string category)
        {
            ViewBag.Category = category;
            return Json(_cat.Category(category).ToDataSourceResult(request));
        }

它调用Category方法,该方法具有字典并基于类别var,它使用存储库来读取所需模型的数据并将其发送回控制器。简单。

但是使用Create / Update / Delete控制器,如果没有copypasting,我就无法做到这一点。这是简化的例子:

[AcceptVerbs(HttpVerbs.Post)]
        public ActionResult Update([DataSourceRequest] DataSourceRequest request,
            string category,
            MeansAssessment meansassessment = null,
            EthinicOrigin ethinicorigin = null)
        {
            ViewBag.Category = category;
            switch (category)
            {
                case "MeansAssessments":
                    if (meansassessment != null && ModelState.IsValid)
                    {
                        _meansAssessmentsRepository.Update(meansassessment);
                    }
                    break;
                case "EthinicOrigins":
                    if (ethinicorigin != null && ModelState.IsValid)
                    {
                        _ethinicOriginsRepository.Update(ethinicorigin);
                    }
                    break;
            }
            return Json(ModelState.ToDataSourceResult());
        }

正如您所看到的,我必须将我拥有的所有模型类型的对象(其中有20多个)放入方法签名中,并使用开关调用正确的存储库。

我想像创建一些基本类并使用它一样。我尝试了不同的,但没有运气。

非常感谢任何帮助和想法!

0 个答案:

没有答案