【问题标题】:T4MVC MVC2 Views in Areas not generated未生成区域中的 T4MVC MVC2 视图
【发布时间】:2011-05-02 06:31:13
【问题描述】:

我只是创建了一个空的 MVC2 项目。添加一个区域和一个控制器以及一个视图。将 T4MVC 文件包含到项目中并运行自定义工具。

除了区域中视图的 ViewNames 之外,所有内容都会生成。

我的树形结构:

区域

  • 我的区域
    • 控制器
      • MyTestController.cs
    • 观看次数
      • 我的测试
        • MyTestView.aspx
      • MySecondTestView.aspx

我可以直接在 Views 文件夹以及控制器命名的文件夹中查看视图..

有没有人经历过这样的事情?

【问题讨论】:

    标签: asp.net-mvc-2 views t4mvc areas


    【解决方案1】:

    T4MVC 绝对支持访问区域中的视图。我刚刚在一个新项目上尝试了以下内容:

    • 创建一个名为“Stuff”的区域
    • 在那里创建一个 Foo 控制器
    • 在该控制器中,右键单击 Index() 并要求它生成视图
    • 重新运行 T4MVC 自定义工具

    在那之后,我可以写:

        public virtual ActionResult Index()
        {
            return View(Views.Index);
        }
    

        public virtual ActionResult Index()
        {
            return View(MVC.Stuff.Foo.Views.Index);
        }
    

    【讨论】:

    • 好的,我想我知道发生了什么。它与区域无关。我再次尝试了您的示例并且它有效,但是.. 如果我添加第二个操作 Index2 然后运行 ​​T4MVC,然后为这个新操作生成一个视图,然后再次运行 T4MVC.. 它不会创建视图名称。显然,如果需要在生成的代码中添加的唯一更改是关于 Views.. 它不会添加它,直到需要生成一些其他内容(如操作)。你能确认这种情况吗?非常感谢。
    • 嗯,你可能是对的,有一个过度热心的优化。是否删除所有生成的文件(在 .tt 文件下)并重新运行模板修复它?
    • 我刚刚将 T4MVC 更新到 2.6.31,应该可以解决这个问题。你能试一下吗?它在#nuget 上。谢谢!
    【解决方案2】:

    ASP.NET MVC 2 开箱即用,使用命名约定将视图链接到控制器操作。这些约定允许它为控制器中的操作找到默认视图。

    例如,MyTestController.cs 会有动作。假设它只有一个,Test。

    默认情况下,MVC 框架会在文件夹 MyArea/Views/MyTest 中查找名为 Test.aspx 的视图

    如果在那里找不到,它将在 /MyArea/Views/Shared 下查找视图 Test.aspx

    然后它会在 /Views/Shared 中查找。

    [我可能错过了一个位置,肯定有4个,但不记得另一个了……无论如何,原则是成立的]

    如果它在任何这些位置都找不到 Test.aspx,它会抱怨。

    你似乎在反对这些惯例。这会让你陷入各种复杂的境地。所以最好阅读一本关于 MVC 的好书,真正了解 MVC 是如何工作的基础知识。

    【讨论】:

    • 好吧,也许这不是我最好的例子。即使我遵循约定,我仍然对不生成视图名称的 MVC2 区域和 T4MVC 存在问题。如果我将视图重命名为“索引”,与 MyTestController 操作之一相同,我仍然无法让 T4MVC 生成视图名称。当我不使用区域时,它工作得非常好。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-09-24
    • 1970-01-01
    • 2011-10-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-02-07
    相关资源
    最近更新 更多