我在MVC工作,我希望能够使用弹出窗口实现登录系统。
我坚持的部分是,当弹出窗口中成功登录时 - 然后需要关闭并且必须在主页面上进行重定向。我正在努力实现这一点,因为我遇到了JQuery的一大堆范围问题。
我用这个创建弹出窗口:
window.open('@Url.Action("Login", "User", null, "http")', 'Login', 'height=500,width=300');
能够将var window =
添加到上面的代码中以便我能够在成功登录时引用我想要关闭的窗口会很好 - 但是该变量超出了我的登录窗口的范围:
@{
ViewBag.Title = "Login";
}
<h2>Login</h2>
<p id="login-fail" style="display:none">Incorrect username/password</p>
@using (Html.BeginForm()) {
@Html.LabelFor(x => x.Email, new { id = "txt-email" })
@Html.TextBoxFor(x => x.Email)
<br />
<label for="txt-password">Password</label>
<input id="txt-password" type="password" />
<input type="submit" value="Login" />
}
<script type="text/javascript">
$(function () {
var success = '@Model.Success';
if (success == "True") {
loginSuccess(this.window);
}
var failed = '@Model.Failed';
if (failed == "True") {
$("#login-fail").show();
}
});
</script>
我发布表单时刷新部分视图,Jquery在加载页面时检查是否成功。成功之后,我尝试将当前窗口传递给名为loginSuccess的js函数:
function loginSuccess(elem) { // successful login has occurred
elem.close();
window.location = //getRedirect;
}
到目前为止,我无法关闭弹出窗口,然后在设置重定向时需要将焦点放在主窗口上。
我有一个名为functions的javascript文件,我的主窗口和弹出窗口都是引用。但是,创建弹出窗口的js不在函数文件中,并且窗口变量不可用于任一窗口。
长话短说,我试图模拟LinkedIn登录过程,因此通过调用IN.UI.Authorize().place();
来调用创建弹出窗口的代码 - 它排除了返回窗口变量,因为代码必须保持不变我是否使用我的模拟LinkedIn或真实的。
非常感谢任何帮助,特别是以某种方式引用弹出窗口,然后重新聚焦到主窗口进行重定向。
答案 0 :(得分:1)
听起来像你需要使用window.top函数:
答案 1 :(得分:0)
我发现从两个页面引用我的functions js file
导致了问题,因为主页面的js
文件可能能够引用子页面,但根据子页面{{{ 1}}文件等
js
通过调用附加到父窗口的函数帮助解决了我的问题:
window.opener
弹出窗口现在关闭,重定向发生在主页面上。