2013-10-16 43 views
0

我有一個ASP.net網站與C#後端代碼。我們有以下(刪節)代碼,它符合我們的需求,但它可能會更好。這在一個名爲SearchResults.aspx的頁面上。如果用戶沒有登錄,鏈接將把他們重定向到登錄頁面。如果他們已登錄,則會將其重定向到該項目的查找頁面。我希望它做的是在他們登錄後將它們重定向到相應的項目頁面,如果他們點擊「未登錄鏈接」。我需要以什麼方式將returnURL提供給登錄頁面?我嘗試過的每一種方式,都會在登錄後將我重定向到默認頁面。ASP.NET 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"]); 
    } 
+1

給我們的代碼,其中實際登錄正在發生的事情,也就是 - 爲的Login.aspx –

+0

我已經包括它的後端代碼,但是我用了和ASP包含登錄頁面的.net模板。所有在後端的是上面的加載函數。 –

+0

檢查您提供的前3行功能,您認爲它執行了什麼? –

回答

0

在我的嘗試,試圖得到它的工作之一,我只是在嘗試將DestinationPageUrl屬性爲我的ASP :登錄控制。出於某種原因,它要求我同時使用這個和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); 
    } 
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"); 
    } 

} 
+0

好吧,就像我甚至沒有考慮過使用完整的路徑而不是相對的,所以看起來更有希望。但是,當我添加Login_Click事件處理程序時,它將導致它不能登錄。執行此操作時不會重定向到主頁。登錄頁面正在使用驗證組和asp:Login控件,但我沒有看到成功登錄頁面的設置位置。 –

+1

我個人不使用登錄控件。 'Login_Click()'是一個我爲了可讀性而命名的佔位符方法。查看Login控件,在用戶通過身份驗證後引發'LoggedIn'事件,因此您可以將重定向邏輯放在該方法中。 – Zerkey

+0

明白了。需要該事件...在我最初的嘗試之一中,我試圖只依賴DestinationPageUrl屬性,該屬性可用於其他頁面,但不能用於其他查詢字符串屬性。發佈解決方案。謝謝你的幫助。 –