2012-04-19 12 views
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」に設定する前に、フォームが新しいページで既に開かれていることがわかりました。

この問題の最適な解決策は何ですか?

+0

私は混乱しています。あなたのコードはクライアント上でJavascriptとして実行されているようですが、コードビハインドから_self "に目標を設定しています。 –

+0

さて、私はjs関数をコードの背後から呼びます。これは技術的にはクライアント上で実行されますが、サーバ側で呼び出されます。 –

答えて

0

ページは常に新しいタブ/ウィンドウで開きます。私はそのフォームがすでに が新しいページで開き、ターゲットを "_self"のコードの背後に設定するとわかりました。

あなたは正しいです。フォームのためにASP.netコードが実行された後、target = "_ blank"が使用されます。だからあなたのtarget = "_ self"の設定は間違っています。

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

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

最初のアプローチでは、ユーザーがフォーム、つまりform.onsubmitハンドラを送信するときにポップアップを開く必要があります。ログインに成功すると、POPUPの場所を "Pages/MyProjects.aspx"に設定し、そうでなければPOPUPを閉じます。もちろん、ターゲット= "ブランク"を設定しないでください

2番目のアプローチでは、ターゲットを設定しないでください(つまり、_selfでなければなりません)。以前の関数がエラーがあるとき、彼らは唯一のiframe内に表示されます

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

なるよう

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

+0

私は第2のアプローチを好むでしょう。あなたは 'window.top.location =" Pages/MyProjects.aspx "'を置くことをどこで提案しますか?私が古い関数のように使うのは同じことです。 –

+0

質問を反映するためにthgeの回答を更新しました。 – amitamb

+0

これはまさに私があなたの答えにコメントを投稿する前に試したことです。関数openInSameWindowは何もすることはできません。MyProjects.aspxページは、Home.aspxページ内のiframeで開きます。 –

関連する問題