返回视图(),用于控制器.net mvc中的所有操作

时间:2015-03-11 10:22:49

标签: c# asp.net-mvc asp.net-mvc-4

我有一个控制器HomeController.cs

在这个控制器中我有一些动作,比如,联系等。

如果我希望它能工作,我必须为每个视图定义函数:

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

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

我希望对于所有对控制器的请求,它将返回View(),因此我不必为每个视图定义一个函数。

*更新 我想知道是否有一些处理程序可以像这样工作:

protected override void OnActionCall()
    {
        return View();
    }

1 个答案:

答案 0 :(得分:3)

警告:我强烈反对这一点,因为它几乎违背了使用MVC的目的,但......

您可以创建一个可以找到该视图的常规操作:

public ViewResult Page(string urlSlug)
{
    if (!this.ViewExists(urlSlug))
    {
        throw new HttpException(404, "Page not found");
    }

    return this.View(urlSlug);
}

private bool ViewExists(string name)
{
    ViewEngineResult result = ViewEngines.Engines.FindView(ControllerContext, name, null);
    return (result.View != null);
}

您需要修改RouteConfig

routes.MapRoute(
            name: "Home_Page",
            url: "{urlSlug}",
            defaults: new { controller = "Home", action = "Page" },
            constraints: new { urlSlug = @"[A-Za-z0-9-]{1,50}" }
        );

现在,如果您查找/about,它将查找该视图。当您想要使用Model数据时,您将遇到问题。我认为花在问这个问题和实施这个解决方案上的时间比仅仅return View()

要花费更长的时间