Asp.net mvc 3 为什么T4MVC为控制器操作引入虚拟控制器?
为什么T4MVC使用控制器方法?换衣服Asp.net mvc 3 为什么T4MVC为控制器操作引入虚拟控制器?,asp.net-mvc-3,t4mvc,Asp.net Mvc 3,T4mvc,为什么T4MVC使用控制器方法?换衣服 public ActionResult Details (string Id) 致: 我已经看过T4MVC,但不明白为什么。通常,如果框架/库需要虚拟方法(另请参见Nhibernate),这意味着您的方法将被覆盖 因此T4MVC将您的操作方法标记为virtual,因为它会覆盖它们 让我们看一个简单的控制器: public partial class HomeController : Controller { public virtual Acti
public ActionResult Details (string Id)
致:
我已经看过T4MVC,但不明白为什么。通常,如果框架/库需要虚拟方法(另请参见Nhibernate),这意味着您的方法将被覆盖 因此T4MVC将您的操作方法标记为
virtual
,因为它会覆盖它们
让我们看一个简单的控制器:
public partial class HomeController : Controller
{
public virtual ActionResult Index()
{
ViewBag.Message = "Welcome to ASP.NET MVC!";
return View();
}
}
如果转到T4MVC.tt
下的generatedHomeController.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创建这个生成的类的原因和目的 使它们虚拟化的唯一好处是允许开发人员在使用T4MVC助手的地方“转到实现/定义”。这是因为静态助手“MVC”上的控制器类型是基本控制器类型
public static partial class MVC
{
public static HomeController Home = new T4MVC_HomeController();
}
因此,在以下代码段中,转到操作名称上的定义将转到基本实现:
@Url.Action(MVC.Home.Index())
+1 David Ebbo提供了如此直观的功能。当我意识到这一点时,我简直是疯了
PS:这不适用于通过分部函数添加的无参数操作,不幸的是,它们导航到生成的代码
@Url.Action(MVC.Home.Index())