ASP.NET Response.Redirect с помощью jQuery Mobile - хеширование URL - PullRequest
9 голосов
/ 28 июля 2011

У меня есть стандартные формы аутентификации ASP.NET приложения. Моя страница регистрации и входа в систему находится в одном файле .aspx с двумя страницами jQuery Mobile. Если я отправляю обратно свою страницу ASP.NET, например, если пользователь не может правильно войти в систему ... и т. Д. Хэш URL-адреса начинает добавляться к себе снова и снова.

Пример URL:
http://localhost:56644/Register.aspx?ReturnUrl=%2fDefault.aspx%3fbla%3dtest&bla=test#Register.aspx?ReturnUrl=%2fDefault.aspx%3fbla%3dtest&bla=test

После того, как мой пользователь прошел аутентификацию, я хочу перенаправить на ReturnUrl без всей информации о хэше или найти способ сохранения URL-адреса во время обратных передач?

Markup:

<div data-role="page" id="register">
    <div data-role="content" data-scroll="true" data-theme="b" class="Content">
        ......  
        <a href='#login'>Login</a               
    </div>
</div>
<div data-role="page" id="login">
    <div data-role="content" data-scroll="true" data-theme="b" class="Content">
        .....                             
        <a href='#register' >Registered Yet?</a>
    </div>
</div>

Код-код на Register.aspx:

protected void btnLogin_Click(object sender, EventArgs e)
{        
    if (LoggedIn)
    {
        FormsAuthentication.SetAuthCookie("blabla", true); 
        //Note: Request.QueryString["ReturnUrl"] = "/Default.aspx?bla=test";
        Response.Redirect(Request.QueryString["ReturnUrl"]);

    }
}

Ответы [ 3 ]

2 голосов
/ 09 ноября 2012

Это старый пост, но, столкнувшись с той же проблемой, я опубликую решение, которое я разработал, - оно немного грубое, но может кому-то помочь или улучшить. Более того, это в ASP.NET MVC 4 - не уверен, как перенести тот же код в aspx

Что я в основном делаю, так это захват URL-адреса RedirectTo и использование его для предоставления в качестве data-url атрибута тега формы LogOn. Другими словами, в MVC 4:

  1. Я создаю копию LogOn.csthml как LogOn.Mobile.cshtml
  2. в LogOn.Mobile.cshtml я добавляю следующее: :

     @{
     string landPage = Request.Url.Query.Length>11?
    Request.Url.Query.Substring(11):"";//very rough, to be improved. 
       // Here I am clipping the RedirectTo prefix of the Query
     }
    //replaces the boilerplate @using (Html.BeginForm())
    @using (Html.BeginForm("LogOn", "Account", FormMethod.Post, 
      new { @data_url = landPage})) 
    

Этого должно быть достаточно, чтобы все заработало

0 голосов
/ 21 ноября 2012

Jquery Mobile предназначен только для того, чтобы иметь только одну страницу и использовать #page для загрузки через ajax страницы, на которую вы хотите перейти.

из того, что я вижу, пытается добавить метод указания страницы, которую мыТаким образом, # Register.aspx добавляет его в конец.

Мое решение этой проблемы состояло в том, чтобы использовать usercontrols для различных мобильных разделов моего сайта, и я использовал ajax для всего, что обычно было бы обратной передачей.

0 голосов
/ 29 июля 2011
protected void btnLogin_Click(object sender, EventArgs e)
{        
    if (LoggedIn)
    {
        FormsAuthentication.SetAuthCookie("blabla", true); 
        //Note: Request.QueryString["ReturnUrl"] = "/Default.aspx?bla=test";

         // This will get only the first instance of ReturnUrl
         var url = Request.Url.PathAndQuery.Substring(
                Request.Url.PathAndQuery.IndexOf("ReturnUrl=") + ("ReturnUrl=").Length);

        Response.Redirect(url);

    }
}
...