【问题标题】:T4MVC not generating some Actions for one ControllerT4MVC 没有为一个控制器生成一些动作
【发布时间】:2011-06-13 19:17:34
【问题描述】:

我的情况是 T4MVC 正确生成所有内容(意味着智能感知显示所有区域/控制器/操作并且所有内容都编译),但是当我运行代码时,我收到 T4MVC was called incorrectly 运行时错误。

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

我有一个 BaseController 类,它有一些共享代码(并继承自 Controller)。在Controllers 目录(项目的根目录)中,我有许多控制器,它们都继承自BaseController

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

运行 T4MVC(版本 2.6.54),除了 one 控制器外,一切正常。奇怪的是,智能感知适用于控制器,但在引用实际操作时会阻塞(在 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;            
        }
    }
}

【问题讨论】:

    标签: t4mvc


    【解决方案1】:

    如果其他人遇到此问题,我会遇到类似的问题并产生运行时错误消息,但情况有所不同。它位于 ActionResult 方法末尾的 RedirectToAction 语句中:

    RedirectToAction(Edit(id));
    

    改正后错误消失:

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

    错误消息不是很直观,重新运行自定义工具的建议也无济于事。

    【讨论】:

      【解决方案2】:

      您确定重新运行 T4MVC 以根据最新生成(右键单击 .tt 文件/运行自定义工具)?

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

      【讨论】:

      • 是的,我已经重新运行了几次,结果相同。我有一个大型项目,我会尝试缩减它或构建一个具有相同问题的应用程序。
      • 很好奇。我缩减了我的项目并遇到了同样的问题。我正要在这里发帖,但尝试先删除所有 T4MVC 生成的文件,然后重新运行脚本。 纠正了它。然后我重新运行脚本,问题又回来了。 @David,如果您想看一看,我很乐意分享这个项目(但不想公开发布)。
      • 当然,您可以通过电子邮件将其发送给我:david.ebbo AT microsoft。越小/越简单越好! :)
      • 对于任何有类似问题的人 - 问题是我的区域控制器继承的控制器是常规类。在 David 的建议下,我将它们更改为 abstract,然后 T4MVC 按预期拾取所有内容。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-10
      • 2023-03-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多