[英]ASP.NET ReturnURL to specific search results page
我有一個帶有 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"]);
}
在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");
}
}
在我嘗試讓它工作的一次嘗試中,我只是嘗試為我的 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);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.