我正在使用实体框架开发 ASP.NET MVC 3 项目。
我正在创建一个包含不同子页面的管理页面。这些页面仅用于配置不同模型的属性。我所有的视图都是强类型的,所以每个视图都会向控制器发送某种类型的对象。由于控制器对每个模型和视图执行相同的操作,并且我有许多模型,我想只维护一个控制器而不复制粘贴它,只更改方法签名和其他一些东西。
我总是通过发布请求设置一个类别变量,以保存我当前所在的子页面并检测我需要读取或插入/删除哪个模型的数据。我对读取方法没有任何问题:
public ActionResult Read([DataSourceRequest] DataSourceRequest request, string category)
{
ViewBag.Category = category;
return Json(_cat.Category(category).ToDataSourceResult(request));
}
它调用具有字典的 Category 方法,并基于它使用存储库的类别 var 来读取所需模型的数据并将其发送回控制器。简单的。
但是对于创建/更新/删除控制器,如果没有复制粘贴,我就无法做到这一点。这是简化的示例:
[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 多个)放入方法签名中,并使用 switch 调用正确的存储库。
我想做一些事情,比如创建一些基本类并使用它。我试过不同的是,但没有运气。
任何帮助和想法将不胜感激!