【发布时间】:2017-05-19 21:24:50
【问题描述】:
我在 .ascx(用户控件)中有一个 Telerik RadGrid,它需要 *_NeedDataSource 方法来填充网格的 DataSource。
同一个用户控件正在执行一些用户身份验证,只需检查HttpContext.Current.User.Identity.IsAuthenticated,如果为假,则执行Response.Redirect(url, false)。
由于在用户未登录时调用了 *_NeedDataSource 方法,我看到我们的实时系统上引发了异常,这似乎是可能的,因为我将 false 作为 endResponse 参数的值传递给Response.Redirect(允许所有后续页面事件执行)。原作者是这样编码的,因为我认为他是在社区的指导下进行的:
- Using endResponse in a Response.Redirect
- https://blogs.msdn.microsoft.com/tmarq/2009/06/25/correct-use-of-system-web-httpresponse-redirect/
我一直在尝试找到一种方法,可以可靠地阻止 *_NeedDataSource 的执行,而无需将 endResponse 值恢复为 true。
我可以想到一些涉及标志设置和检查的方法,但这似乎不优雅,后续开发人员可能会忘记实现相同的模式。我还尝试实现一个基本控件类型来派生覆盖 OnPreRender (或其他),类似于 Alexander Manekovskiy 对这个问题的回答:ASP.NET Redirect and End Page 但我无法制定出覆盖的方法,这将阻止 @ 的执行987654333@.
谁能推荐一种在这种情况下有效且不需要太多认知开销的方法?
【问题讨论】:
-
好像XY problem。不想触发 NeedDataSource 事件的底层业务逻辑是什么?最简单的方法是您可以制作 RadGrid.Visible=false 或者您可以将逻辑放入 NeedDataSource。
-
如问题所述,我不希望 NeedDataSource 执行,因为当用户未登录时,它会导致异常。
-
如我所说,可以查看NeedDataSource里面的业务逻辑,return; 如果用户未通过身份验证。有很多方法可以根据需要处理问题,但 EndResopnse 与 NeedDataSource 无关。
标签: c# asp.net redirect telerik-grid