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" の設定は間違っています。

この問題の解決策の 1 つは、POPUP ウィンドウを使用して "../Pages/MyProjects.aspx" ページを表示することです。

それ以外の場合は、「../Pages/MyProjects.aspx」を IFRAME 外の同じウィンドウに表示できるようにしてください。それ以外の場合は、適切なメッセージを表示する iframe にユーザーを保持します。

form.onsubmit最初のアプローチでは、ユーザーがフォーム、つまりハンドラーを送信したときにポップアップを開く必要があります。ログインに成功したら、POPUP の場所を「Pages/MyProjects.aspx」に設定します。それ以外の場合は、POPUP を閉じます。もちろん、target="_blank" を設定しないでください

2 番目のアプローチでも、ターゲットを設定しないでください (つまり、_self にする必要があります)。ログインに成功すると、次のように場所を設定します。

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

あなたの以前の機能が

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

エラーがある場合は、iframe のみで表示されます。

于 2012-04-19T13:25:42.680 に答える