【问题标题】:View from custom controller overriding default view从自定义控制器查看覆盖默认视图
【发布时间】:2015-08-02 19:10:41
【问题描述】:

我使用的是 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();
    }

发生的情况是,当我去注册或登录控制器触发器时,检查信息,说不需要重定向然后返回视图。但是因为视图是空的,所以我的页面是空白的,而不是其默认的登录/注册表单。

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

【问题讨论】:

  • 你不应该在控制器操作中使用Response.Redirect(或者甚至Response)。请改用重定向结果。
  • 是的,我用谷歌搜索了,但不重定向时的问题仍然相同,返回的视图覆盖了登录/注册页面的默认视图。我相信这是因为路由覆盖了默认操作但不知道如何避免这种情况。
  • 嗯,完全不清楚您期望会发生什么。
  • 当我进入登录页面时,我希望出现登录页面。但是由于我的自定义路由和控制器,登录页面是空白的。

标签: model-view-controller controller routes orchardcms


【解决方案1】:

您的路线会覆盖所有路线({*path}。因此,当您重定向时,您会重定向到....我猜是您的重定向器。因此,您正在呈现的视图是您的控制器的视图,而不是您之后的页面.

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

【讨论】:

  • 我认为它是这样的(我已经改变了我的方法)但想要确认。但是对于将来的参考,有没有办法从每个定制页面而不是从登录/注册路由?还是重定向,然后返回默认操作?
  • 技术上是的,如果你能把所有的路线都按正确的优先顺序排列(即你的 {*path} 将是许多更具体的路线的后备)。这是关于路线优先级stackoverflow.com/questions/6493026/… 的帖子。我相信你也可以使用负值。也就是说 - 我有理由相信,任何时候你想做你所要求的,首先去其他控制器不是正确的方法。您几乎肯定在寻找身份验证过滤器
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2016-09-27
相关资源
最近更新 更多