在ASP.NET WebForms中,当用户尝试访问需要验证的页面时,系统通常会重定向到登录页面,并在查询字符串中包含ReturnURL参数,以便在用户登录成功后返回到原始请求页面。但是,在第一次访问需要验证的页面时,可能会发现重定向到登录页面时缺少ReturnURL参数,这通常是由于第一次访问时尚未将ReturnURL参数写入到Page对象的ViewState中导致的。
为了解决此问题,可以在页面中添加以下代码,以确保将ReturnURL参数写入ViewState中:
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (!IsPostBack && !Context.Request.IsAuthenticated)
{
// Ensure ReturnURL is included in ViewState
if (Request.QueryString["ReturnUrl"] != null)
{
ViewState["ReturnUrl"] = Request.QueryString["ReturnUrl"];
}
}
}
在以上示例中,OnInit方法会在页面初始化时执行,并检查页面是否是首次加载且用户未通过身份验证。如果是,则检查查询字符串中是否存在ReturnUrl参数,并将其写入ViewState中。这将确保在重定向到登录页面时,ReturnUrl参数不会丢失,从而保证用户成功返回原始请求页面。