我的登录页面是 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”之前,该表单已经在新页面中打开了。
这个问题的最佳解决方案是什么?
最佳答案
Page always opens in new tab/window. I figured out that form already opens in new page before i set target to "_self" from code behind.
你是对的。 ASP.net 代码在 target="_blank"用于表单后执行。所以你设置的target="_self"是错误的。
您遇到的问题的一个解决方案是使用 POPUP 窗口显示“../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中显示。
关于c# - 如何根据登录成功在新窗口/选项卡或同一窗口/选项卡中打开页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10226614/