2013-04-16 44 views
1

我可以在不編寫操作方法的情況下將cshtml頁面作爲視圖提供服務嗎?因此,如果我有一個名爲Help的控制器和一個名爲Money.cshtml的視圖,我想以localhost/help/money的形式訪問它,而無需編寫任何操作方法?cshtml /無操作方法的視圖

+1

你在不寫動作方法的目標是什麼?這是爲了管理您的URL(即具有該確切的URL localhost/help/money),還是您不想在控制器中編寫操作方法?編寫一個動作方法很簡單,它不會做任何事情,只會呈現具有相同名稱的視圖。 –

+0

我不想在執行返回視圖時編寫操作方法。我有很多頁面是靜態的,我希望它們看起來與我的視圖屬於同一個地方。 – orangesherbert

回答

3

你可以做如下的事情。 定義映射到只有一個動作例如爲:

routes.MapRoute(
    "Help_default", // Route name 
    "help/{path}", // URL with parameters 
    new { controller = "About", action = "Page" } 
); 

然後你的幫助控制器可能看起來像下面的路線。它基本上只是抓取來自URL的路徑並將其作爲模型傳遞給視圖。然後

public class HelpController : Controller 
{ 
    public ViewResult Page(string path) 
    { 
     return View("Page", path); 
    } 
} 

你的頁面視圖可能看起來像:

@model string 

@{ 
    string viewPath = string.Format("~/Views/Help/{0}.cshtml", Model); 
    ViewEngineResult result = ViewEngines.Engines.FindView(this.ViewContext.Controller.ControllerContext, viewPath, null); 
    if (result.View != null) 
    { 
     @Html.Partial(viewPath) 
    } else { 
     // Define a not found view in the shared folder? 
     @Html.Partial("NotFound") 
    } 
} 

這基本上檢查是否視圖與路徑或不存在。這感覺有點骯髒,但我認爲它會工作。