我可以在不编写动作方法的情况下将cshtml页面作为视图提供吗?
所以,如果我有一个名为Help的控制器和一个名为Money.cshtml的视图,我想在没有编写动作方法的情况下将其作为localhost / help / money访问?
答案 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")
}
}
这基本上会检查视图是否存在该路径。感觉有点脏,但我认为它会起作用。