2009-08-06 100 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") 
} 

這最後一個看起來只有在這一個地方,你指定的地方。