如果先前调用了Response.Redirect,则避免使用Grid_NeedDataSource调用

时间:2017-01-05 11:00:10

标签: c# asp.net redirect telerik-grid

我在.ascx(用户控件)中有一个Telerik RadGrid,需要*_NeedDataSource方法来填充网格的数据源。

相同的用户控件正在进行一些用户身份验证,只需检查HttpContext.Current.User.Identity.IsAuthenticated并执行Response.Redirect(url, false),如果它是假的。

由于在用户未登录时调用*_NeedDataSource方法,我发现在我们的实时系统上引发了异常,这似乎是可能的,因为我将false作为{的值传递{1}} endResponse的参数(允许执行所有后续页面事件)。原作者用这种方式编码,因为我认为他正在接受社区的指导:

  1. Using endResponse in a Response.Redirect
  2. https://blogs.msdn.microsoft.com/tmarq/2009/06/25/correct-use-of-system-web-httpresponse-redirect/
  3. 我一直试图找出一种能够可靠地阻止执行Response.Redirect而不会恢复为*_NeedDataSource值为true的方法。

    我可以想到一些涉及标志设置和检查的方法,但这似乎不够优雅,后来的开发人员可能忘记实现相同的模式。我也试过实现一个基本控件类型来从哪个覆盖OnPreRender(或其他),类似于Alexander Manekovskiy对这个问题的响应:ASP.NET Redirect and End Page但我无法找出方法来覆盖它阻止执行endResponse

    任何人都可以推荐一种可以在这种情况下工作并且不需要太多认知开销的方法吗?

1 个答案:

答案 0 :(得分:1)

在调用/访问*_NeedDataSource的代码中,检查当前Response的状态代码。如果状态代码为302,则在请求处理中先前调用了Response.Redirect()

if (Response.StatusCode != 302)
{
    // do something here
}