为什么T4MVC使用virtual作为控制器方法?更改为
public ActionResult Details (string Id)至:
public virtual ActionResult Details (string Id)关于T4MVC,我已经看过other questions了,但我不明白为什么。
发布于 2012-07-11 21:55:56
通常,如果框架/库需要虚拟方法(参见Nhibernate),这意味着您的方法将在某个地方/有时被覆盖。
因此,T4MVC将您的操作方法标记为virtual,因为它覆盖了它们。
让我们来看一个简单的控制器:
public partial class HomeController : Controller
{
public virtual ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}如果您转到T4MVC.tt下生成的HomeController.generated.cs,您将发现一个生成的类,它继承自您的控制器并覆盖您的操作方法:
[GeneratedCode("T4MVC", "2.0"), DebuggerNonUserCode]
public class T4MVC_HomeController: MvcApplication8.Controllers.HomeController {
public T4MVC_HomeController() : base(Dummy.Instance) { }
public override System.Web.Mvc.ActionResult Index() {
var callInfo = new T4MVC_ActionResult(Area, Name, ActionNames.Index);
return callInfo;
}
}我没有使用过T4MVC,所以我不知道T4MVC创建这个生成的类的原因和目的。
发布于 2017-07-11 19:19:09
我能看到的唯一的好处是让他们虚拟是允许开发人员“去实现/定义”的地方使用T4MVC帮助器。这是因为静态帮助器'MVC‘上的controller类型是基本控制器类型。
public static partial class MVC
{
public static HomeController Home = new T4MVC_HomeController();
}因此,在下面的代码片段中,Go to Definition on the Action Name将转到Base Implementation:
@Url.Action(MVC.Home.Index())+1 David Ebbo提供了这样一个直观的功能。当我意识到这一点时,我被震撼了!
PS:这不适用于通过partial函数添加的无参数操作,不幸的是,它们会导航到生成的代码。
https://stackoverflow.com/questions/11433242
复制相似问题