如何从MVC3的对话框/弹出窗口中的子域加载视图?

时间:2012-09-07 20:03:26

标签: c#-4.0 jquery asp.net-mvc-4

我有一个带登录按钮的主屏幕。当用户单击“登录”按钮时,必须在对话框(popUp窗口)中打开登录视图。扭曲的主屏幕和登录屏幕是两个子域中的两个不同的应用程序。 因此,我必须在my.sample.com应用程序的对话框(PopUp窗口)中打开auth.sample.com的登录视图。 对不起英语不好。请参阅以下代码:

<p>
  <button type="submit" name="PopupLoginbutton" id = "PopupLoginbutton" value="Popbutton">Login</button> 
</p>
<div id="dialog" title="Login" style="overflow: hidden;"> 
<script type="text/javascript">
$(function () {
    $('#dialog').dialog({
        autoOpen: false,
        width: 400,
        resizable: false,
        title: 'hi there',
        modal: true,
        open: function (event, ui) {
                           $(this).load("http://auth.sample.com/");
        },
        buttons: {
            "Close": function () {
                $(this).dialog("close");
            }
        }
    });

    $('#PopupLoginbutton').click(function () {
                  $('#dialog').dialog('open');
    });
}); 
</script> 

2 个答案:

答案 0 :(得分:0)

只有在当前MVC3项目中才能访问视图。如果要执行的只是显示登录屏幕,则只需使用完整URL(http://my.sample.com/login)显示弹出窗口。

如果您想将信息传递给登录应用程序,那么您必须使用表格和POST / GET到完整的URL。

答案 1 :(得分:0)

如果我正确了解您的位置,您希望提供对网站内容或区域的访问权限,但仅限于用户已登录。您是否希望通过现有的身份验证方式为新网站提供登录功能?子域?

不幸的是,如果您使用常用方法进行身份验证和授权,则无法按照您的描述进行操作。登录到不同的子域不会让您到达目的地。我无法登录银行,然后查看我的电子邮件。

您可以在任何地方发布POST,甚至可以使用JS加载来自其他网站/域的内容(如果最终用户权限/配置允许),但您在浏览器中表示已登录用户的令牌不会延续从一个域到下一个域。

有几种方法,这里有几种常见方法:

  1. 创建自定义MembershipProvider和RoleProvider。这些将允许您使用已有的服务器端逻辑来访问您的身份验证服务。
  2. 将新站点配置为使用子域正在使用的相同成员资格提供程序(和数据库)。
  3. 构建一个Web服务和标记化策略,以显示现有子域中的身份,并将其合并到您的站点中。
  4. 如果您拥有子域,则数字2是最简单的。如果您可以将呼叫包装到成员资格服务,则数字1不会太难。但是,如果您的子域是第三方,并且它锁定了用户数据库,那么您将没有太多运气,除非它们提供了一种包装其登录服务的方法。

    希望这会有所帮助。

    干杯。