我有一个带有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>
Edit-我正在使用ASP.net Web应用程序模板的默认登录结构,所以这就是Login后端中的全部内容。
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属性。由于某种原因,它要求我同时使用此事件和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);
}
我正在测试计算机上执行此操作,因此这是示例URL。按照我的方式,“登录”链接将我带到具有localhost:5629 / Account / Login.aspx?returnURL =〜/…这样的URL的“登录”页面。我不知道是否应该将“〜/”放在其中,但如果不这样做,它将保留在“帐户”目录中。我确认我已将重定向删除为默认,但仍恢复为默认]