【问题标题】:Creating a View Before the Controller in ASP.NET MVC在 ASP.NET MVC 中的控制器之前创建视图
【发布时间】:2012-09-20 18:11:41
【问题描述】:

我通过在我的解决方案中的 Views 文件夹下创建一个新文件夹来创建 Razor 视图,然后我右键单击该文件夹并选择“添加视图”。

后来,我转到我的控制器文件夹并右键单击它,选择“添加控制器”。但是,现在我想将我创建的视图附加到我的控制器上,当我这样做时,Visual Studio 无法识别我的视图存在:

return View("MyViewName");

如何让 Visual Studio 识别我已经存在的视图?我宁愿不使用 Resharper 创建我的 Razor 视图来解决问题(因为我已经创建了视图)。

提前致谢!

【问题讨论】:

  • 您的视图是否在正确的(常规)文件夹中?
  • 您确定视图文件夹的名称与控制器名称相同吗?
  • 啊,是的,文件夹名称和控制器名称匹配有效。但是,现在我必须为每个控制器创建一个新的视图文件夹?即使我只对每个控制器的一两个操作感兴趣?

标签: asp.net-mvc asp.net-mvc-3 visual-studio-2010 razor convention-over-configur


【解决方案1】:

不需要写东西,你的文件夹必须命名为控制器。如果您想要其他文件夹名称,请输入完整路径:

return View("~/Views/MyCustomFolder/MyViewName.cshtml");

【讨论】:

    【解决方案2】:

    这是convention over configuration ASP.NET MVC 的概念 你的控制器动作应该和视图一样被调用:

    public class MyBeautifulController : Controller
    {
      public ActionResult MyActionIndex()
      {
        return View();
      }
    }
    

    感谢您的视图应该这样调用和定位:~/Views/MyBeautiful/MyActionIndex.cshtml

    基本上你在你的控制器类名中删除了最后一个“控制器”。

    这是 COC(约定优于配置)。现在,如果您想调用一个不像您的操作那样调用的视图,您将在您的操作中执行以下操作:

    public class MyBeautifulController : Controller
    {
      public ActionResult MyActionIndex()
      {
        return View("ViewCalledDifferently", new MyModel());
      }
    }
    

    在这种情况下,您的视图将被调用并定位如下: ~/Views/MyBeautiful/ViewCalledDifferently.cshtml 并将接受 MyModel 作为模型类型。

    希望这会有所帮助。

    【讨论】:

      猜你喜欢
      • 2011-09-11
      • 1970-01-01
      • 2023-03-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多