2

我有登录页面,它是 IFrame。如果用户成功登录,我想用他的个人内容打开新页面,如果不是,我想在同一个 iFrame 中显示错误消息。

这是我的代码:

<form class="register-form" runat="server" id='form1' target="_blank">
      <div class="input username">
        <asp:TextBox ID="tbUsername" runat="server" type="text" value="Username"></asp:TextBox>
      </div>
        <div class="input password">
          <asp:TextBox ID="tbPassword" runat="server" value="Password" type="text"></asp:TextBox>
        </div>
      <div class="submit">
        <asp:Button runat="server" ID="btnSignIn" type="button" OnClick="btnSignIn_Click">
        </asp:Button>
      </div>
</form>

如您所见,我最初将表单目标属性设置为“_blank”,并计划动态更改它。

这是我在后面代码中的 onclick 事件:

protected void btnSignIn_Click(object sender, EventArgs e)
    {
        if (Membership.Providers["CmsMembershipProvider"].ValidateUser(tbUsername.Text, tbPassword.Text))
        {
            Session["Username"] = tbUsername.Text.ToString();
            FormsAuthentication.SetAuthCookie(tbUsername.Text, true);         
            Response.Redirect("../Pages/MyProjects.aspx");
        }
        else {
            btnSignIn.OnClientClick = "openInSameWindow()";
            Msg.Text = "Login failed. Please check your user name and password and try again.";
        }
    }

这是简单的js函数:

    <script type="text/javascript">

        function openInSameWindow() {
            var myForm = document.getElementById('form1');
            myForm.target = '_self';
        }
</script>

页面始终在新选项卡/窗口中打开。在我从后面的代码中将目标设置为“_self”之前,我发现该表单已经在新页面中打开了。

这个问题的最佳解决方案是什么?

4

1 回答 1

0

页面始终在新选项卡/窗口中打开。在我从后面的代码中将目标设置为“_self”之前,我发现该表单已经在新页面中打开了。

你说的对。ASP.net 代码在 target="_blank" 用于表单之后执行。所以你的 target="_self" 设置是错误的。

您遇到的问题的一种解决方案是使用弹出窗口显示“../Pages/MyProjects.aspx”页面。

否则,如果您可以在 IFRAME 外部的同一窗口中显示“../Pages/MyProjects.aspx”,我会更喜欢它。否则,让用户在 iframe 中显示适当的消息。

对于第一种方法,您必须在用户提交表单即form.onsubmit处理程序时打开弹出窗口。成功登录后,将 POPUP 的位置设置为“Pages/MyProjects.aspx”,否则关闭 POPUP。当然不要设置 target="_blank"

对于第二种方法,也不要设置目标(即它应该是_self)和成功登录设置位置,如下所示。

window.top.location = "Pages/MyProjects.aspx"

这样你的早期功能就变成了

function openInSameWindow() {
  window.top.location = 'Pages/MyProjects.aspx';
}

当出现错误时,它们将仅显示在 iframe 中。

于 2012-04-19T13:25:42.680 回答