2011-04-18 55 views
0

我正在开发一个项目,一旦用户被引导到某个页面,他们会收到一定程度的“身份验证”,如果用户试图在他们之前从页面导航离开,我想删除此“身份验证”完成了一个表格。从C#(.Net 3.5)中的页面导航离开时调用方法的方法?

我想知道是否是一种方法来调用方法来重定向离开页面事件生命周期的特定页面(或不同的,如果你有建议)?我对C#和.Net框架是一种新的东西,所以如果这不是标准的,那么告诉我什么才是正确的方法。

谢谢!

回答

0

你的页面不会知道它正在被导航,因为它实际上是无状态的。一旦该页面由C#生成,它将被传输到浏览器。该页面不在C#中“存在”。一旦生成,就是这样。

您可以使用会话变量来跟踪用户的“身份验证”级别。如果他们击中其他页面,则可以检查此变量的值并据此采取行动。如果他们填写了表格,则在会议中记录该事实。

另一种选择是在用户离开页面时使用javascript回调服务器。这不会在Page事件生命周期内起作用,因为它已经完成

此“验证”是否存在很长时间?你需要坚持吗?

+0

如果用户完成表单,整个会话(或直到注销)都存在“验证”。我确实意识到无国籍,因此我认为这不一定会奏效。我不确定是否有任何自定义事件可以解决这个问题(当我谈论导航时,我严格意味着在站点内导航,而不是在外部域/站点上)。也许我应该重组这个过程? – kachingy123 2011-04-18 10:17:07

1

您可以尝试使用由JavaScript事件触发的PageMethod。这需要在aspx中有一个ScriptManager。

实施例: 的JavaScript后面

[PageMethod] 
public static void RevokeAuthentication() 
{ 
    // Do stuff here 
} 

function LeavePage(e) { 
    PageMethods.RevokeAuthentication(); 
} 

window.onbeforeunload = LeavePage; 

C#代码然而,该方法并非万无一失。如果客户端的浏览器禁用了脚本,则JavaScript将不会运行。

也许更好的方法是在会话中处理MasterPage中的身份验证。 MasterPage与PHP开发人员使用的包含类似。

E.g. OnLoad检查页面,如果pageName允许更高的身份验证,请设置它,否则撤消它。

+0

AjaxPro还提供了类似的功能,易于使用。 http://www.ajaxpro.info/Examples/Classes/default.aspx – 2011-04-18 10:19:04

+0

如果您愿意,jQuery也可以调用PageMethod。 – 2011-04-19 00:43:59