【问题标题】:asp.net mvc - Views and Controllersasp.net mvc - 视图和控制器
【发布时间】:2009-08-06 14:37:32
【问题描述】:

控制器如何知道要返回哪些视图?我认为这是通过命名约定,但我看到了一些实例,例如在 Nerd Dinner 应用程序中,名称不匹配。我在哪里或如何看到这个映射?谢谢。

【问题讨论】:

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


    【解决方案1】:
    public class EmployeesController
    {
        public ViewResult Index()
        {
            return View("CustomerName");
        }
    }
    

    将搜索:

    Views/Employees/CustomerName.aspx
    Views/Employees/CustomerName.ascx
    Views/Shared/CustomerName.aspx
    Views/Shared/CustomerName.ascx
    

    差不多就是这样。

    当你只是返回 View();在不指定名称的情况下,它会搜索与控制器操作同名的视图。在这种情况下,Index.aspx

    【讨论】:

    • 您传递给 View() 的参数是要搜索的名称吗?另外,有没有办法告诉控制器在特定区域寻找视图?
    • 参数是视图的名称,例如客户名称 = 客户名称.aspx。据我所知,mvc 查找的位置是硬编码的,但您可以自定义它以开发 ViewEngine。 ViewEngines.Engines.Add(new MyCusyomViewEngine()); //Global.asax.cs
    • 这些位置确实是使用默认视图引擎硬编码的。而且参数确实是视图的名称。始终指定视图的名称被认为是最佳实践,因为这样您就可以对其进行单元测试。
    • 您可能需要更正您的代码。它需要返回 View("CustomerName");小号,我知道! :)
    【解决方案2】:

    有三种方法可以指定视图名称。

    按惯例

    public ActionResult MyAction {
      return View()
    }
    

    这将查找具有操作方法名称的视图,即“MyAction.ascx”或“MyAction.aspx”

    ** 按名称 **

    public ActionResult MyAction {
      return View("MyViewName")
    }
    

    这将查找名为“MyViewName.ascx”或“MyViewName.aspx”的视图。

    ** 按应用程序路径 **

    public ActionResult MyAction {
      return View("~/AnyFolder/MyViewName.ascx")
    }
    

    这最后一个只看这个地方,你指定的地方。

    【讨论】:

      【解决方案3】:

      它基于Controller中Action的名称。这是一个例子:

      我有一个名为 UserController 的控制器。

      我对该控制器的一个操作名为 Index。

      当我说返回 View();

      它将在 Views 目录中的 User 文件夹中查找 Index.aspx 或 Index.ascx

      它还会在共享文件夹中查找。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-02-02
        • 1970-01-01
        • 1970-01-01
        • 2012-04-15
        • 2011-06-06
        相关资源
        最近更新 更多