ASP.NET ReturnURL到特定的搜索结果页面

时间:2013-10-16 21:09:51

标签: c# asp.net login

我有一个带有C#后端代码的ASP.net站点。我们有以下(删节)代码,它符合我们的需求,但它可能会更好。这是在一个名为SearchResults.aspx的页面上。如果用户未登录,则链接会将其重定向到登录页面。如果他们已登录,则会将其重定向到该项目的查找页面。我想要它做的是在他们登录后将他们重定向到相应的项目页面,如果他们点击“未登录的链接”。我需要以什么方式将returnURL提供给登录页面?我试过的每一种方式,只是在登录后将我重定向到默认页面。

<AnonymousTemplate>
    <!--Want to change the link below so that the return URL will take me to 
    ItemInformation.aspx-->
     <%# DataBinder.Eval(Container.DataItem, "itemnumber").ToString().Trim() %><br/>
     <asp:HyperLink runat="server" ID="HyperLink1" NavigateUrl='Account/Login.aspx'>
     Please login to review information for this item.</asp:HyperLink>
</AnonymousTemplate>
<LoggedInTemplate>
    <asp:HyperLink ID="HyperLink1" runat="server" NavigateUrl='<%#
       "~/ItemInformation.aspx?&ItemID=" + DataBinder.Eval(Container.DataItem,
       "itemnumber").ToString().Trim() + "&itemdept=" + DataBinder.Eval(
       Container.DataItem, "department").ToString()%>'
       Text='<%# DataBinder.Eval(Container.DataItem, "itemnumber")%>'>
    </asp:HyperLink>
</LoggedInTemplate>

编辑 - 我正在使用ASP.net Web应用程序模板的默认登录结构,所以这就是登录后端的所有内容。

    protected void Page_Load(object sender, EventArgs e)
    {
        string returnUrl = Request.QueryString["ReturnUrl"];
        RegisterHyperLink.NavigateUrl = "Register.aspx?ReturnUrl=" +
          HttpUtility.UrlEncode(Request.QueryString["ReturnUrl"]);
    }

2 个答案:

答案 0 :(得分:3)

SearchResults.aspx

if (!Request.IsAuthenticated)
{
    Response.Redirect("/Login.aspx/?ReturnURL="+HttpContext.Current.Request.Url.AbsoluteUri); // dont forget to use urlencode
}

Login.aspx

protected void Login_Click()
{
    if (Request.QueryString["ReturnURL"] != null)
    {
        Response.Redirect(Request.QueryString["ReturnURL"]);
    }
    else
    {
        Response.Redirect("/Home.aspx");
    }

}

答案 1 :(得分:0)

在我试图让它工作的一次尝试中,我只是尝试为我的asp:Login控件设置DestinationPageUrl属性。出于某种原因,它要求我同时使用this和OnLoggedIn事件(在Zerkey指出之前我没有意识到这个事件的存在)。返回URL中的附加问号也导致了问题,所以这就是我在Login.aspx中所做的。

标记:

<asp:Login ID="LoginUser" runat=server" EnableViewState="false"
       RenderOuterTable="false" OnLoggedIN="UserLoginOnLoggedIn">...</asp:Login>

代码:

protected void UserLoginOnLoggedIn(object sender, EventArgs e)
    {
        string itemid, itemdept;
        try
        {
            s1 = Request.QueryString["ItemID"].Trim();
            s2 = Request.QueryString["Dept"].Trim();
        }
        catch
        {
            //makes strings null if querystrings aren't present
            s1 = "";
            s2 = "";
        }
        string returnUrl = Request.QueryString["ReturnUrl"] + "&ItemID=" +
            Request.QueryString["ItemID"] + "&Dept=" +
                        Request.QueryString["Dept"];
        if ((!String.IsNullOrEmpty(returnUrl) && !String.IsNullOrEmpty(s1) && 
        !String.IsNullOrEmpty(s2)))
            LoginUser.DestinationPageUrl = returnUrl;
        else
            LoginUser.DestinationPageUrl = "~/Default.aspx";
        Response.Redirect(LoginUser.DestinationPageUrl);
    }