2013-11-26 29 views
0

假設我有很多Controllers,並且很多Controllers共享Action。共享這些常見的Actions以消除重複代碼的最佳方式是什麼?我知道ASP.NET MVC:如何覆蓋父控制器方法

一種方法是將這些共同Actions重構爲父母abstract Controller,像這樣..

public abstract class BaseController : Controller { 

    //handles common help page for all controllers 
    public ActionResult Help(string helpTopic) { 
     ..open help page.. 
     return View(page); 
    } 
} 

//now Controller1 and Controller2 has the help page for free! 
public class Controller1: BaseController { 
} 

public class Controller2: BaseController { 
} 

但是,如果我試圖內的任何子控制器像這樣的覆蓋Help行動..

//customized help page for Controller1 
public class Controller1: BaseController { 
    public new ActionResult Help(string helpTopic) { 
     .. my own customized help page.. 
     return View(page); 
    } 
} 

我會得到錯誤The current request for action 'Help' on controller type 'Controller1' is ambiguous between....

那麼如何重寫父控制器方法?

回答

0

我所做的成功覆蓋父控制器的方法是標記方法virtual和使用override關鍵字在孩子控制器的方法,像這樣......

public abstract class BaseController : Controller { 

    //handles common help page for all controllers 
    public virtual ActionResult Help(string helpTopic) { 
     ..open help page.. 
     return View(page); 
    } 
} 

//Controller1 has a customized help page 
public class Controller1: BaseController { 
    public override ActionResult Help(string helpTopic) { 
     .. my own customized help page.. 
     return View(page); 
    } 
} 

//Controller2 has help page for free! 
public class Controller2: BaseController { 
}