首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么T4MVC引入虚拟控制器操作?

为什么T4MVC引入虚拟控制器操作?
EN

Stack Overflow用户
提问于 2012-07-11 21:01:13
回答 2查看 1.5K关注 0票数 2

为什么T4MVC使用virtual作为控制器方法?更改为

代码语言:javascript
复制
public ActionResult Details (string Id)

至:

代码语言:javascript
复制
public virtual ActionResult Details (string Id)

关于T4MVC,我已经看过other questions了,但我不明白为什么。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-07-11 21:55:56

通常,如果框架/库需要虚拟方法(参见Nhibernate),这意味着您的方法将在某个地方/有时被覆盖。

因此,T4MVC将您的操作方法标记为virtual,因为它覆盖了它们。

让我们来看一个简单的控制器:

代码语言:javascript
复制
public partial class HomeController : Controller
{
    public virtual ActionResult Index()
    {
        ViewBag.Message = "Welcome to ASP.NET MVC!";

        return View();
    }       
}

如果您转到T4MVC.tt下生成的HomeController.generated.cs,您将发现一个生成的类,它继承自您的控制器并覆盖您的操作方法:

代码语言:javascript
复制
[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创建这个生成的类的原因和目的。

票数 3
EN

Stack Overflow用户

发布于 2017-07-11 19:19:09

我能看到的唯一的好处是让他们虚拟是允许开发人员“去实现/定义”的地方使用T4MVC帮助器。这是因为静态帮助器'MVC‘上的controller类型是基本控制器类型。

代码语言:javascript
复制
public static partial class MVC
{
    public static HomeController Home = new T4MVC_HomeController();
}

因此,在下面的代码片段中,Go to Definition on the Action Name将转到Base Implementation:

代码语言:javascript
复制
@Url.Action(MVC.Home.Index())

+1 David Ebbo提供了这样一个直观的功能。当我意识到这一点时,我被震撼了!

PS:这不适用于通过partial函数添加的无参数操作,不幸的是,它们会导航到生成的代码。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11433242

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档