没有动作方法的cshtml / view

时间:2013-04-16 15:33:59

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

我可以在不编写动作方法的情况下将cshtml页面作为视图提供吗?

所以,如果我有一个名为Help的控制器和一个名为Money.cshtml的视图,我想在没有编写动作方法的情况下将其作为localhost / help / money访问?

1 个答案:

答案 0 :(得分: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")
    }
}

这基本上会检查视图是否存在该路径。感觉有点脏,但我认为它会起作用。