Tomemos como ejemplo un proyecto de ASP.NET MVC predeterminado estándar creado por Visual Studio.ASP.NET MVC redirigir después del inicio de sesión a la página de donde provino un usuario
Estar en ../Home/About
página que haga clic en Iniciar sesión enlace y acceder a la página ../Account/LogOn
. Después de iniciar sesión, me redireccionan a la página Home
, no a la página Home/About
desde la que llego a la página LogOn
. ¿Por qué es eso?
Aunque, en el AccountController tenemos:
[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.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
es el problema en el hecho de que string returnUrl
está vacía después de hacer clic en Iniciar sesión enlace? Cómo asignarle un valor al hacer clic en Iniciar sesión en el enlace?
¿Cómo redirigir a un usuario, después de iniciar sesión, a la página de la que proviene?
Ver código:
<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>
<% } %>
Editado (añade):
hecho, se descubrió que por encima de vista de código no es muy relevante para el problema, en lugar que debería haber mirado esto (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")%> ]
<%
}
%>
¿Podemos ver su punto de vista? y su web.config? – Gregoire