3

T4MVCがすべてを適切に生成している状況があります(つまり、インテリセンスはすべての領域/コントローラー/アクションを表示し、すべてがコンパイルされます)が、コードを実行すると、T4MVC was called incorrectlyランタイムエラーが発生します。

生成されたファイルを調査したところ、プロジェクト内の1つのコントローラーについて、基本クラスのアクションのみがオーバーライドされたスタブアクションを生成していることがわかりました。他のコントローラーの場合、すべてのアクションが生成されています。以下に説明するように、これらはすべて同じ設定になっています。

BaseControllerいくつかの共有コードを持つ(そしてから継承する)クラスがありますControllerControllersディレクトリ(プロジェクトのルート)には、から継承するいくつかのコントローラーがあります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;            
        }
    }
}
4

2 に答える 2

6

他の誰かがこれに遭遇した場合、私は同様の問題と結果として生じる実行時エラーメッセージを持っていましたが、少し異なるシナリオでした。これは、ActionResultメソッドの最後のRedirectToActionステートメントにありました。

RedirectToAction(Edit(id));

次のように修正すると、エラーは解消されました。

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

エラーメッセージはあまり直感的ではなく、カスタムツールを再実行するという提案は実際には役に立ちません。

于 2013-01-07T16:49:27.873 に答える
4

T4MVCを再実行して、最新のものに基づいて生成しましたか(.ttファイルを右クリック/カスタムツールを実行)?

それが問題ではない場合は、問題のあるサンプルアプリを調べて、何が起こっているのかを確認する必要があるかもしれません。

于 2011-06-14T00:56:51.060 に答える