2011-06-13 58 views
3

我有一个情况T4MVC正在产生一切正常(意思是intellisense显示所有区域/控制器/动作和一切编译),但是当我运行代码时,我得到一个T4MVC was called incorrectly运行时错误。T4MVC没有为一个控制器产生一些动作

我调查了生成的文件,发现对于我的项目中的一个控制器,只有基类中的动作才会生成重写的存根操作。对于其他控制器,正在生成所有操作。他们都有相同的设置,如下所述。

我有一个BaseController类有一些共享代码(并从Controller继承)。在Controllers目录(项目的根目录)中,我有一些控制器,全部从BaseController继承。

然后我有几个区域。在每个区域中,我有相同的控制器,每个控制器都从根控制器目录中的同名控制器继承。

运行T4MVC(版本2.6.54),一切正常,除了一个控制器。奇怪的是,intellisense适用于控制器,但在引用实际动作时(在ActionLink()调用中)扼流圈。

我手动添加了一个特别的动作到生成的代码,并没有错误。

所以我的问题是,什么会导致T4MVC到而不是生成一个控制器的所有代码?缺少的操作全部是public virtual ActionResult,而且这些操作本身工作正常。问题控制器在所有区域都有相同的问题。

一些缩写代码。

/Controllers/BaseController.cs

namespace MyProject.Controllers 
{ 
    public abstract partial class BaseController : Controller 
    { 
     protected ISession session; 

     public BaseController() 
     { 
     } 

     // other shared methods/actions 
    } 
} 

/Controllers/ActivitiesController.cs(这就是问题所在控制器)

namespace MyProject.Controllers 
{ 
    public partial class ActivitiesController : BaseController 
    { 
     // for resolving concurrency exceptions 
     private Activity userValues; 
     private Activity databaseValues; 

     public ActivitiesController() : base() 
     { 
      ViewBag.ControllerName = "Activities"; 
     } 

     // this action is causing the problem used like 
     <li>@Html.ActionLink("Activities", MVC.Areas.Module1.Activities.Index())</li> in a view 
     public virtual ActionResult Index() 
     { 
      return View(); 
     } 
    } 
} 

/Areas/Module1/Controllers/ActivitiesController.cs。这是全班

namespace MyProject.Areas.Module1.Controllers 
{ 
    public partial class ActivitiesController : MyProject.Controllers.ActivitiesController 
    { 
     public ActivitiesController() : base() 
     { 
      base.currentModule = Modules.Module1;    
     } 
    } 
} 

回答

4

你一定要重新运行T4MVC到基于最新的(点击右键.TT文件/运行自定义工具)?

如果这不是问题,我可能需要看看有问题的示例应用程序,看看发生了什么。

+0

是的,我重新运行了几次,结果相同。我有一个大型项目,我会尝试削减它或建立一个具有相同问题的应用程序。 – 2011-06-14 12:29:42

+0

好奇。我削减了我的项目,并有同样的问题。我正要在这里发帖,但试着先删除所有T4MVC生成的文件,然后重新运行脚本。并且_that纠正了它。然后,我重新运行脚本,**问题又回来了**。 @David,如果你想看看它,我会很乐意分享这个项目(但不想公开发布)。 – 2011-06-14 13:43:34

+0

当然,你可以发邮件给我:david.ebbo AT微软。越小/越简单越好! :) – 2011-06-14 17:16:01

5

如果有其他人遇到这种情况,我有一个类似的问题,并产生运行时错误消息,但在一个不同的场景。这是在RedirectToAction声明在ActionResult的方法结束:

RedirectToAction(MVC.[action name].Edit(id)); 

错误消息是不是很直观,建议重新:

RedirectToAction(Edit(id)); 

错误纠正它之后就走了运行定制工具并没有真正的帮助。