Take the standard default ASP.NET MVC project created by Visual Studio as an example.
From the ../Home/About page, click the Login link and go to the ../Account/LogOn page. After logging in, I am redirected to the Home page, and not to the Home/About page, from which I go to the LogOn page. Why is this?
Although in AccountController we have:
[HttpPost] public ActionResult LogOn(LogOnModel model, string returnUrl) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (!String.IsNullOrEmpty(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } }
Is the problem that the string returnUrl empty after clicking the Login link? How to assign it a value when you click the Login link?
How to redirect the user after entering the page from which he or she came?
View code:
<asp:Content ID="loginContent" ContentPlaceHolderID="MainContent" runat="server"> <h2>Log On</h2> <p> Please enter your username and password. <%: Html.ActionLink("Register", "Register") %> if you don't have an account. </p> <% using (Html.BeginForm()) { %> <%: Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.") %> <div> <fieldset> <legend>Account Information</legend> <div class="editor-label"> <%: Html.LabelFor(m => m.UserName) %> </div> <div class="editor-field"> <%: Html.TextBoxFor(m => m.UserName) %> <%: Html.ValidationMessageFor(m => m.UserName) %> </div> <div class="editor-label"> <%: Html.LabelFor(m => m.Password) %> </div> <div class="editor-field"> <%: Html.PasswordFor(m => m.Password) %> <%: Html.ValidationMessageFor(m => m.Password) %> </div> <div class="editor-label"> <%: Html.CheckBoxFor(m => m.RememberMe) %> <%: Html.LabelFor(m => m.RememberMe) %> </div> <p> <input type="submit" value="Log On" /> </p> </fieldset> </div> <% } %>
Edited (added):
It turned out that the above view code is not very appropriate for the problem, instead I had to look at this ( LogOnUserControl.ascx ):
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %> <% if (Request.IsAuthenticated) { %> Welcome <b><%: Page.User.Identity.Name %></b>! [ <%: Html.ActionLink("Log Off", "LogOff", "Account") %> ] <% } else { %> [ <%: Html.ActionLink("Log On", "LogOn", "Account")%> ] <% } %>
redirect c # asp.net-mvc
rem
source share