2009-08-06 93 views
2

控制器如何知道哪些视图返回?我认为这是通过命名约定,但我看到了例子,例如在名称不匹配的书呆子晚宴应用程序中。我在哪里或如何看到这个映射?谢谢。asp.net mvc - 视图和控制器

回答

6
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 

这几乎是它..

当你刚刚返回查看();没有指定名称,它搜索与控制相同名称的视图。在这种情况下,Index.aspx

+0

您传递给View()的参数是否意味着它将搜索的名称?另外,有没有办法让控制器在特定区域寻找视图? – Crios 2009-08-06 14:41:55

+0

参数是视图的名称,例如CustomerName = CustomerName.aspx。据我所知,mvc的位置是硬编码的,但你可以自定义开发一个ViewEngine。 ViewEngines.Engines.Add(new MyCusyomViewEngine()); //Global.asax.cs – 2009-08-06 14:45:46

+0

这些位置实际上是使用默认viewengine进行硬编码的。 而参数确实是视图的名称。总是指定视图的名称是最佳做法,因为您可以通过这种方式对其进行单元测试。 – 2009-08-06 14:56:02

0

它基于控制器中Action的名称。这里有一个例子:

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

我在该控制器上的一个操作被命名为Index。

当我说return View();

它看起来在浏览目录,在用户文件夹中,Index.aspx的或Index.ascx

此外,它也会在共享文件夹。

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") 
} 

这最后一个看起来只有在这一个地方,你指定的地方。