繁体   English   中英

使用jQuery Mobile的ASP.NET Response.Redirect - Url哈希

[英]ASP.NET Response.Redirect with jQuery Mobile - Url hashing

我有一个标准的表单auth ASP.NET应用程序。 我的注册和登录页面与两个jQuery Mobile页面位于同一.aspx文件中。 如果我回发我的ASP.NET页面,例如用户无法正确登录...等Url哈希开始一遍又一遍地追加自己。

示例网址:
HTTP://本地主机:?56644 / Register.aspx RETURNURL =%2fDefault.aspx%3fbla%3dtest&BLA =试验#Register.aspx RETURNURL =%2fDefault.aspx%3fbla%3dtest&BLA =测试

一旦我的用户通过身份验证,我想在没有所有哈希信息的情况下重定向到ReturnUrl,或者在回发期间找到保留网址的方法?

标记:

<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"]);

    }
}

这是一个老帖子,但遇到了同样的问题,我将发布我已经解决的解决方案 - 它有点粗糙,但它可以帮助某人或改进。 此外,它在ASP.NET MVC 4中 - 不确定如何将相同的代码迁移到aspx

我基本上做的是捕获RedirectTo URL并使用它来提供LogOn表单标记的data-url属性。 换句话说,在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})) 

这应该足以让它发挥作用

Jquery Mobile设计为只有一个页面,并使用#page通过ajax加载你想要去的页面。

从我可以看到它试图附加其指示页面我们的方法因此#Register.aspx它添加到最后。

我对这个问题的解决方案是对我网站的不同移动部分使用usercontrols,我使用ajax来处理通常是回发的任何内容。

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

    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM