обратный URL не работает после входа в систему - PullRequest
1 голос
/ 04 марта 2012

Я работаю над приложением asp.net MVC 3. Одна домашняя страница приложения, есть несколько ссылок, которые перенаправляют на страницу входа, например:

 <a href="Home/Login?returnUrl=/Disputes/Index"> Disputes </a>

метод действия входа в систему выглядит так:

  public ActionResult Login() 
        {
return view();
        }

при входе в систему У меня есть частичный вид, подобный этому:

 @Html.Partial("_LogOn", new LogOnModel { Type = LogOnTypeEnum.Obligor })

и _LogOn частичное выглядит так:

вверху это выглядит так:

@{
    string retUrl = "";
    if (ViewContext.HttpContext.Request.UrlReferrer != null)
    {
        retUrl =
          ViewContext.HttpContext.Request.UrlReferrer.PathAndQuery;
    }             
}

и форма выглядит так:

@using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { autocomplete = "off", id = "frmLogin", Type = 2, model = this.Model, returnUrl = Request.QueryString["ReturnUrl"] }))

и, наконец, метод входа в систему контроллера аккаунта:

 public ActionResult LogOn(LogOnModel model, string returnUrl)

{
// I want to redirect to localhost:2304//myapp/returnurl but returnurl is empty

}

Я следую этому примеру (он не использует частичное представление, как я использую)

http://visualstudiounleashed.com/mikesnell/post/2011/08/16/Using-the-ASPNET-MVC-3-Logon-returnUrl-Parameter.aspx

1 Ответ

1 голос
/ 04 марта 2012

Не используйте UrlReferrer для получения обратного URL.Вместо этого примите это в качестве аргумента для вашего метода действия GET:

public ActionResult Login(string returnUrl) 
{
    return View(new LogOnModel { ReturnUrl = returnUrl });
}

В вашем LogOnModel должно быть свойство ReturnUrl, мы используем это:

[HiddenInput(DisplayValue = false)]
public string ReturnUrl { get; set; }

Тогда, когда пользовательотправьте форму, убедитесь, что ReturnUrl входит в ваш метод действия POST:

@Html.EditorFor(m => m.ReturnUrl)

public ActionResult LogOn(LogOnModel model)
{
    // on logon success, redirect to model.ReturnUrl
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...