【问题标题】:MVC3 My program is looking in the wrong location for the viewMVC3 我的程序在错误的位置寻找视图
【发布时间】:2013-06-02 18:10:59
【问题描述】:

我创建了一个项目,并在其中努力工作并创建了许多模型、视图和控制器。一切都很好。我决定重命名我的一个模型,并相应地重命名我的控制器并认为它会继续工作得很好。这是因为我想在以后更合适的地方使用原始名称。例如。

旧名称:
我的旧模型
MyOldController
我的旧视图

重命名为:
我的新模型
我的新控制器
我的新视图

现在一切都很好,除了当我单击指向我的新视图的链接时,我的程序会查找并尝试显示显然不存在的 MyOldView。但是,当我手动输入 /MyNewView 时,它可以工作。

如何更改我的控制器以在 MyNewView 文件夹中查找索引,而不是在 MyOldView 文件夹中查找索引。

我什至尝试删除并重新创建控制器无济于事。

提前感谢您的帮助。

编辑:对于那些这么快回复的人,请注意: 采取的具体步骤是:
1. 将模型文件从 MyOldModel.cs 重命名为 MyNewModel.cs
2. 将控制器文件从 MyOldController.cs 重命名为 MyNewController.cs
3.重命名视图上的FOLDER(仅包含Index.cshtml)
从 MyOldView 到 MyNewView
4. 在每一步,visual studio 都会提示我将所有引用重命名为要重命名的对象,我接受了(说是)。所以类名都得到了正确更新。至少从我所见,所有其他参考也是如此。

根据这里所说的,它应该可以工作。

我只是重命名了

【问题讨论】:

  • 您的视图在哪里(什么文件夹?)。您应该使用控制器的名称创建一个文件夹:(例如,如果您的控制器名为 fooController ,则创建一个名为 foo 的文件夹)并在那里创建您的视图
  • 通过按钮点击检查您的 _Layout 是否指向正确的视图
  • 请发布您的控制器类,您是否也更改了任何操作名称?
  • 文件夹(视图)被重命名,控制器类和文件夹都只包含默认的Index和index.cshtml。 _Layout 不再需要链接,因为它们不再需要。我正在使用部分视图从不同的文件加载链接。将此作为答案,我会给您接受的答案点,因为另一个文件中的链接是错误的。谢谢。
  • @RhysW 请将您的评论作为答案。它使我找到了解决方案,我想给你接受的答案。

标签: asp.net-mvc asp.net-mvc-3


【解决方案1】:

根据操作的要求,我的评论作为答案:

检查您的 _Layout 是否也通过按钮单击指向正确的视图,否则当您用新的控制器/视图替换/重命名旧控制器/视图时,它仍会搜索旧控制器/视图,很高兴为您提供帮助!

【讨论】:

  • 我有一个包含链接和其他信息位的 XML 文件,以保证一个合适的表格。我的一个模型读入并解析它。然后链接显示在局部视图中,而局部视图又显示为 _Layout.cshtml 的一部分。这就是您的评论使我得到答案的方式。再次感谢。
  • 啊,部分观点,我忘记了那些,直奔大炮,很高兴你把它整理出来!
【解决方案2】:

您是否确保重命名了 Controller 文件中的类,而不仅仅是文件本身?即它包含

public class MyNewController : Controller {
    ....
}

【讨论】:

  • 我理解这一点,并小心翼翼地确保所有引用都被重命名。感谢您花时间回答。
【解决方案3】:

假设您对MyNewController 有一个索引操作:

public class MyNewController: Controller
{
    public ActionResult Index()
    {
        return View();
    }
}

现在确保您已将视图放置在~/Views/MyNew/Index.cshtml 中。这是既定的惯例。请注意,如果您的控制器类称为MyNewController,则该文件夹必须称为MyNew。另外不要忘记在重命名控制器类后重新编译您的 Web 应用程序。

【讨论】:

  • 我理解这一点,并小心翼翼地确保所有引用都被重命名。感谢您花时间回答。
【解决方案4】:

您是否对您的路线列表进行了必要的修改(在 Global.asax 文件 i Application_Start() 事件中注册):

public static void RegisterRoutes(RouteCollection routes)
        {
            routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

            routes.MapRoute(
                "Default", // Route name
                "{controller}/{action}/{id}", // URL with parameters
                new { controller = "Home", action = "Index", id = UrlParameter.Optional } // Parameter defaults
            );

        }

【讨论】:

  • 感谢您抽出宝贵时间回答。我看了看那里,没有看到任何有用的东西。
猜你喜欢
  • 1970-01-01
  • 2015-05-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2011-11-14
  • 1970-01-01
  • 2018-05-23
  • 2012-05-07
相关资源
最近更新 更多