在ASP.NET MVC中,可以使用抽象基类和泛型控制器来实现对相似的控制器操作进行DRY处理。以下是一个示例代码:
// 抽象基类
public abstract class BaseController : Controller where T : class
{
protected readonly ApplicationDbContext _context;
protected BaseController(ApplicationDbContext context)
{
_context = context;
}
// 公共的通用操作
protected virtual async Task Index()
{
var items = await _context.Set().ToListAsync();
return View(items);
}
// 其他通用操作
// ...
// 子类需要实现的操作
public abstract Task Details(int id);
public abstract Task Create();
public abstract Task Edit(int id);
public abstract Task Delete(int id);
}
// 具体控制器
public class ProductsController : BaseController
{
public ProductsController(ApplicationDbContext context) : base(context)
{
}
public override async Task Details(int id)
{
var product = await _context.Products.FindAsync(id);
if (product == null)
{
return NotFound();
}
return View(product);
}
public override Task Create()
{
// 实现创建操作
// ...
return Task.FromResult(View());
}
public override Task Edit(int id)
{
// 实现编辑操作
// ...
return Task.FromResult(View());
}
public override Task Delete(int id)
{
// 实现删除操作
// ...
return Task.FromResult(View());
}
}
在上述示例中,抽象基类BaseController
定义了通用的控制器操作,包括Index
方法用于显示所有项,以及其他通用操作。子类ProductsController
继承了该抽象基类,并实现了特定的操作,如Details
、Create
、Edit
和Delete
。这样,我们可以在每个具体控制器中重复使用通用的控制器操作,而无需重复编写相同的代码。