T4MVCがすべてを適切に生成している状況があります(つまり、インテリセンスはすべての領域/コントローラー/アクションを表示し、すべてがコンパイルされます)が、コードを実行すると、T4MVC was called incorrectly
ランタイムエラーが発生します。
生成されたファイルを調査したところ、プロジェクト内の1つのコントローラーについて、基本クラスのアクションのみがオーバーライドされたスタブアクションを生成していることがわかりました。他のコントローラーの場合、すべてのアクションが生成されています。以下に説明するように、これらはすべて同じ設定になっています。
BaseController
いくつかの共有コードを持つ(そしてから継承する)クラスがありますController
。Controllers
ディレクトリ(プロジェクトのルート)には、から継承するいくつかのコントローラーがありますBaseController
。
次に、いくつかのエリアがあります。各エリアには同じコントローラーがあり、それぞれがルートコントローラーディレクトリ内の同じ名前のコントローラーから継承しています。
T4MVC(バージョン2.6.54)を実行すると、1つのコントローラーを除いてすべてが正常に機能します。奇妙なことに、インテリセンスはコントローラーに対して機能しますが、実際のアクションが(ActionLink()
呼び出しで)参照されるとチョークします。
生成されたコードに特に1つのアクションを手動で追加しましたが、エラーは発生しませんでした。
だから私の質問は、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;
}
}
}