1

我在 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 不在函数文件中,并且 window 变量对任何一个窗口都不可用。

长话短说,我试图模拟 LinkedIn 登录过程,因此通过调用调用创建弹出窗口的代码IN.UI.Authorize().place();- 这排除了返回窗口变量,因为无论我使用我的模拟 LinkedIn 还是真正的一个。

非常感谢任何帮助,特别是以某种方式引用弹出窗口,然后重新聚焦到重定向的主窗口。

4

2 回答 2

1

听起来你需要使用 window.top 函数:

http://www.w3schools.com/jsref/prop_win_top.asp

于 2013-01-29T11:10:27.297 回答
0

我发现functions js file从两个页面引用我会导致问题,因为主页的js文件可能能够引用子页面,但根据子页面的js文件等,这将是空的。

window.opener通过调用附加到父窗口的函数,帮助我解决了这个问题:

<script type="text/javascript">
  $(function () {
    var success = '@Model.Success';
    if (success == "True") {
      window.opener.loginSuccess(window);
    }
    var failed = '@Model.Failed';
    if (failed == "True") {
      $("#login-fail").show();
    }
  });
</script>

弹出窗口现在关闭并在主页上发生重定向。

于 2013-01-29T13:06:30.933 回答