ASP.NET MVC中的BaseController(示例)

・1 分钟阅读

不要在代码上重复常见的操作,而是尝试实现抽象类来完成工作。

ASP.NET MVC中的每个控制器都处理TempMessages,ViewBags,新的类实例等等。

为什么不创建实现此公共操作的基本控制器,并可由所有派生控制器访问?

像这样:


public abstract partial class BaseController : Controller
{
 public UnitOfWork unitOfWork;

 public BaseController()
 {
 unitOfWork = new UnitOfWork();
 }

 public String ErrorMessage
 {
 get { return TempData["ErrorMessage"] == null ? String.Empty : TempData["ErrorMessage"].ToString(); }
 set { TempData["ErrorMessage"] = value; }
 }
}

并且可以像这样使用:


public partial class HomeController : BaseSecuredController
{
 public KioskController() 
 : base()
 { 
 }

 public virtual ActionResult Index()
 {
 try 
 {
 var result = unitOfWork.DoSomething();
 }
 catch(Exception ex)
 {
 ErrorMessage ="Ooops, something went wrong:" + ex.Message;
 }
 return View(); 
 }
}

相当干净,你不觉得吗?你用这种方法吗?有些人害怕"奇怪的"修饰语,如abstract 或partial 。

Jiaoyang75 profile image