具有数据库调用的通用操作方法 MVC



我正在寻找一种方法来制作可由多个控制器继承的通用操作方法,因此我不必在 MVC 中为不同的控制器和表重复相同的方法。我认为这将适用于我必须经常为多个类做的许多 CRUD 工作。

例如,这是我想复制的代码:

public ActionResult ToggleQC(int? id)
    {
        if (id == null)
        {
            return new HttpStatusCodeResult(HttpStatusCode.BadRequest);
        }
        BACTERIA_EVW bacteria = db.BACTERIA_EVW.Find(id);
        if (bacteria == null)
        {
            return HttpNotFound();
        }
        //add/remove QC status (switch to whichever one it isn't right now)
        if (bacteria.QCOn == null) //if it hasn't been QCed
        {
            bacteria.QCOn = DateTime.Now;
            bacteria.QCBy = User.Identity.Name;
        }
        else //if it has been QCed and they are undoing it
        {
            bacteria.QCBy = null;
            bacteria.QCOn = null;
        }
        //save changes
        db.Entry(bacteria).State = EntityState.Modified;
        db.SaveChanges();
        //return updated QC status partial
        return PartialView("_QCStatus", bacteria);
    }

我需要在化学控制器中做同样的事情,但我宁愿不重复整个事情,只改变一个部分。是否可以将模型类型作为参数传递到方法中,以替换BACTERIA_EVW?我该怎么做?

如果这是非常基本的事情,我深表歉意;我可能不知道要寻找的正确术语。我已经搜索了通用操作方法,但我没有找到任何答案,尽管有一些关于通用控制器的东西 - 我是否需要以某种方式创建一个通用控制器类来包含这样的方法?

非常感谢。

如果您只关心删除code redundancy则可以使用该方法创建一个generic controller并从中继承其他控制器:

 namespace BaseControllers
 {
     public class CoolController
     {
         public virtual ViewResult Get() 
         {
             var awesomeModel = new object();
             return View(awesomeModel);
         }
     }
 }

在子控制器中:

 public class CoolController : BaseControllers.CoolController
 {
     public override ViewResult Get() 
     {
         var ignoredResult = base.Get();
         // ViewData.Model now refers to awesomeModel
         return View("NotGet");
     }
 }

其他CRUD操作也会发生同样的情况。

相关内容

最新更新