1

有人可以建议我什么是干净和正确的渲染方式,什么是 MVC 4 RedirectResult,在 jQuery 对话框中?

我有一个 Facebook 插件,它返回一个“RedirectResult”,以便在登录过程中用户在 facebook 登录页面上重定向,然后返回网站。我想在 jQuery 对话框中加载登录页面,以免离开网站页面。

在我的控制器中,我有:

    if (result.Result != null) return result.Result;

    return HttpContext.Request.IsAuthenticated ? new RedirectResult(!string.IsNullOrEmpty(returnUrl) ? returnUrl : "~/") : new RedirectResult(Url.LogOn(returnUrl));

“result.Result”是一个 RedirectResult 类型,这里我有包含重定向的 URL。

按照我想加载登录 facebook 页面的 jQuery 对话框的视图:

   @using Nop.Web.Framework.UI
    @{
    Layout = "";
    Html.AddCssFileParts("./Plugins/ExternalAuth.Facebook/Content/facebookstyles.css");
    }

<fieldset class="facebook-login-block">
    <legend>@T("Plugins.ExternalAuth.Facebook.Login")</legend>

    <a href="#" class="facebook-btn" id="facebook-btn">&nbsp;</a>
</fieldset>

    <script type="text/javascript">
          $(document).ready(function () {
              $("a#facebook-btn").click(function (e) {
                  e.preventDefault();
                  $('#dialog').dialog({
                      resizable: true,
                      height: 250,
                      width: 400,
                      modal: true,
                      open: function (event, ui) {
                          $('#dialog').load("@Url.RouteUrl("Plugin.ExternalAuth.Facebook.Login", new { ReturnUrl = HttpContext.Current.Request.QueryString["ReturnUrl"] })");             
                      }
                  });


            });
        });
    </script>

    <div id="dialog" style="display:none"></div>

这是原始调用:

<a href="@Url.RouteUrl("Plugin.ExternalAuth.Facebook.Login", new { ReturnUrl = HttpContext.Current.Request.QueryString["ReturnUrl"] })" class="facebook-btn">
    &nbsp;</a>

我试图在加载函数中移动它,但这并没有产生任何结果。

任何建议将不胜感激。谢谢

4

1 回答 1

0

我认为我自己找到了一个可能的解决方案,我不知道这是否是最好的和干净的方法,但是有效。跟随细节。

我将控制器更改为:

        if (result.Result != null) // return result.Result;
        {
            RedirectResult RR = (RedirectResult)result.Result;
            return Content(RR.Url);
        }

        return HttpContext.Request.IsAuthenticated ? new RedirectResult(!string.IsNullOrEmpty(returnUrl) ? returnUrl : "~/") : new RedirectResult(Url.LogOn(returnUrl));

我对此的看法:

<fieldset class="facebook-login-block">
    <legend>@T("Plugins.ExternalAuth.Facebook.Login")</legend>

    @*<a href="@Url.RouteUrl("Plugin.ExternalAuth.Facebook.Login", new { ReturnUrl = HttpContext.Current.Request.QueryString["ReturnUrl"] })" class="facebook-btn">
        &nbsp;</a>*@
    <a href="#" class="facebook-btn" id="facebook-btn">&nbsp;</a>
</fieldset>

<script type="text/javascript">
      $(document).ready(function () {
          $("a#facebook-btn").click(function (e) {
              e.preventDefault();

              $.ajax({
                  type: "GET",
                  async: false,
                  url: "@Url.RouteUrl("Plugin.ExternalAuth.Facebook.Login", new { ReturnUrl = HttpContext.Current.Request.QueryString["ReturnUrl"] })",
                  contentType: "application/json; charset=utf-8",
                  error: function () { return true; },
                  success: function (data) {
                      var $dialog = $('#dialog')
                                      .html('<iframe style="border: 0px; " src="' + data + '" width="100%" height="100%"></iframe>')
                                      .dialog({
                                      resizable: true,
                                      height: 250,
                                      width: 400,
                                      modal: true
                                      });

                      $dialog.dialog('open');
                  }
              });
        });
    });
</script>

<div id="dialog" style="display:none"></div>

欢迎任何其他解决方案。

于 2013-06-13T11:23:22.293 回答