我正在使用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多个)放入方法签名中,并使用开关调用正确的存储库。
我想像创建一些基本类并使用它一样。我尝试了不同的,但没有运气。
非常感谢任何帮助和想法!