2012-12-14 51 views
1

我有一個控制器返回一個ActionResult。具體而言,它在該方法結束時調用return View(someViewModel)。這裏的方法簽名:ASP.Net MVC如何確定從控制器使用的視圖?

protected ActionResult SomeControllerMethod(AViewModel someViewModel) 

我隨後從AViewModelAnInheritedViewModel)繼承,增加了一些新的屬性添加到類,我現在傳遞到SomeControllerMethod

現在,在此方法結束時的返回語句中,我收到有關如何找不到視圖的錯誤。這很公平,但我不確定默認情況下這是如何工作的。

視圖名稱MVC告訴我它正在尋找不與控制器方法或模型類型的名稱對齊。按照相同的模式,沒有與原始模型的名稱相對應的視圖。所以我不確定MVC如何決定它將使用哪個視圖?

回答

4

當你

public ActionResult SomeControllerMethod() 
{ 
    return View(); 
} 

MVC試圖尋找一個名爲 「SomeControllerMethod.cshtml」 視圖。它使用方法的名稱作爲查找視圖文件的指南。

您可以通過重寫此:

public ActionResult SomeControllerMethod() 
{ 
    return View("MyView"); 
} 

,因此MVC將試圖找到 「MyView.cshtml」。

+0

這是不是隻是發送字符串 'MyView的' 爲模型SomeControllerMethod.cshtml? –

+1

要發送模型,您可以使用:'返回視圖(「MyView」,myModelClass);' –

+0

謝謝賈森(和其他人)。如果(在我的情況下)該調用是「View(model)」 - 如果MVC使用模型的類類型來確定要查找的視圖? – larryq

3

此外一定要留意住在/Views/Shared(MVC也將搜索此文件夾默認情況下)的意見。但最煩人的一個是當操作方法已經使用改名ActionNameAttribute,例如:

[ActionName("Bob")] 
public ActionResult MyMethod() 
{ 
    return View(); 
} 

在這種情況下,MVC會去尋找一個名爲「鮑勃」的看法。

1

當用戶輸入一個URL到瀏覽器中時,MVC應用程序使用在Global.asax文件中定義解析 URL,並確定控制器的路徑 路由規則。控制器然後 確定處理請求的適當的操作方法。默認情況下, 請求的URL被視爲一個子路徑,其中包括控制器名稱後跟動作名稱的 。例如,如果 用戶輸入URL http://contoso.com/MyWebSite/Products/Categories, ,則子路徑爲/ Products/Categories。默認路由規則將 「Products」作爲控制器的前綴名稱,該名稱必須以 「Controller」(如ProductsController)結尾。它將「類別」視爲操作的名稱爲 。因此,路由規則會調用產品控制器的 類別方法以處理 請求。如果URL以/ Products/Detail/5結尾,則默認路由 規則將「詳細信息」視爲操作的名稱,並調用產品控制器的詳細信息方法 以處理請求。默認情況下,通過 ,URL中的值「5」將作爲參數傳遞給Detail方法 。以下示例顯示了一個控制器類,其中 具有HelloWorld操作方法。

public class MyController : Controller 
{ 
    public ActionResult HelloWorld() 
    { 
     ViewData["Message"] = "Hello World!"; 
     return View(); 
    } 
} 

參考:http://msdn.microsoft.com/en-us/library/dd410269(v=vs.98).aspx

相關問題