Перенаправление ASP.NET MVC после входа на страницу, с которой пришел пользователь

Возьмем в качестве примера стандартный проект ASP.NET MVC по умолчанию, созданный Visual Studio.

Находясь на странице ../ Home / About , я нажимаю ссылку Войти и попадаю на страницу ../ Account / LogOn . После входа в систему меня перенаправляют на страницу Home , а не на страницу Home / About , с которой я попадаю на страницу LogOn . Почему?

Хотя в AccountController мы имеем:

[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);
    }

Проблема в том, что строка returnUrl пуста после нажатия ссылки Войти в систему ? Как присвоить ему значение при нажатии на ссылку Войти ?

Как перенаправить пользователя после входа на страницу, с которой он пришел?

​​Код просмотра:

<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>
<% } %>

Отредактировано (добавлено):

Оказалось, что приведенный выше код просмотра не очень важен для проблемы, вместо этого мне следовало бы взглянуть на это ( 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")%> ]
<%
}
%>
6
задан rem 22 October 2010 в 08:49
поделиться