从自定义控制器查看覆盖默认视图

时间:2015-05-21 08:22:50

标签: model-view-controller controller routes orchardcms

我正在使用orchardcms 1.9(没有标签创建jet)。我正在编写一个自定义模块来实现自己的控制器,该控制器调用服务,检查一些信息,并根据服务响应重定向或让用户留在页面上。

模块位于默认图层上,换句话说,它位于每个页面上。因此,当用户尝试登录或注册时,此模块会正常检查信息。

这是我的路线:

 new RouteDescriptor {
                    Priority = -1,
                    Route = new Route(
                        "{*path}", // this is the name of the page url
                        new RouteValueDictionary {
                            {"area", "modulename"}, // this is the name of your module
                            {"controller", "controllername"},
                            {"action", "Redirect"}
                        },
                        new RouteValueDictionary(),
                        new RouteValueDictionary {
                            {"area", "modulename"} // this is the name of your module
                        },
                        new MvcRouteHandler())

这是我的控制者:

 public ActionResult Redirect()
        {
            String response = _authService.VerifyRegistration(_orchardServices.WorkContext.CurrentUser);

        if (response.Equals("2"))
        {
            Response.Redirect("~/Registration");
        }
        else if (response.Equals("3"))
        {
            Response.Redirect("~/Users/Account/LogOn");
        }


        return View();
    }

当我进入注册或登录控制器触发器时,检查信息,说不需要重定向然后返回视图。但由于视图为空,我的页面是空白而不是默认的登录/注册表单。

我该如何解决这个问题?我在路由中犯了一个错误,我以某种方式覆盖了默认视图(我尝试了不同的优先级,但响应相同)。

1 个答案:

答案 0 :(得分:1)

你的路由会覆盖所有路由({* path}。所以当你重定向时,你会重定向到....你的重定向器我猜。因此你渲染的视图是你的控制器,而不是你追求的页面

无论逻辑缺陷是什么 - 这都不是全球控制您网站上的授权类型方案的好方法。如果你想要一个人们可能去的页面(例如http://www.mysite/welcome)那么你的问题就是你的路线过于全球化了。但是,如果您的代码建议您要创建“所有页面”检查以查看是否应该登录或注册,那么您应该实现授权过滤器。可以在https://stackoverflow.com/a/30377097/1638254找到授权过滤器的示例(用于略微不同的目的)。您希望使用合适的代码填写OnAuthorization方法以重定向用户(或让他们通过