我正在寻找一种方法来制作可由多个控制器继承的通用操作方法,因此我不必在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
?我该怎么做?
如果这是非常基本的话,我道歉;我可能不知道要找的正确术语。我已经搜索了一般的动作方法,但是我还没有找到任何答案,虽然有一些关于通用控制器的东西 - 我是否需要以某种方式创建一个通用的控制器类来包含这样的方法?
非常感谢。
答案 0 :(得分:0)
如果您只关心删除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
操作也会发生同样的情况。