重定向后如何更新div的内容?

时间:2012-01-02 18:07:22

标签: asp.net-mvc-3 jquery dotnetopenauth

这似乎不可能,但无论如何我会问。 这是方案

我有一个MVC 3视图,可以加载3个部分视图,一个用于登录,一个用于注册,一个用于OpenID登录。

然而,前两个与Ajax配合得很好;第三个视图使用ajax发布到我的openid控制器,我去做一些DotNetOpenAuth魔法

示例:

 var response = authenticationRequest.RedirectingResponse;
                if(response.Status == HttpStatusCode.Redirect)
                {
                    return Json(new {redirectUrl=response.Headers[HttpResponseHeader.Location] });    
                }

我正在从OpenId登录表单发布的控制器返回的Json进行重定向,“记住这篇文章是通过ajax”。因此,在重定向之后,我想用初始openid登录部分视图替换div的内容,并根据重定向到提供程序后发生的情况,使用新视图,用户登录,然后在actionMethod中得到响应。例如,我将检查我的数据库,看看我是否已经拥有该开放ID的帐户。如果我不这样做,我想向用户提供一些基本问题等部分视图..并让他们添加开放ID帐户。

所以似乎这是不可能的,因为重定向会导致将数据恢复到原始页面的任何机会。

有什么想法吗?

按要求处理项目符号:

  • 主视图使用表单
  • 呈现部分视图
  • 部分视图中的表单将ajax发布到控制器中的ActionMethod
  • 控制器中的ActionMethod使用redirectUrl
  • 返回Json
  • OnSuccess回调函数读取json结果并将客户端重定向到redirectUrl
  • 用户在重定向位置登录openid提供商
  • OpenId提供程序将结果发送回生成初始Json redirectUrl结果的同一个ActionMethod
  • 在open Id上执行数据库查找,如果找不到用户则返回部分视图,如果找到则登录用户。

我想在登录表单所在的原始div中找到未找到用户的视图ID。这不起作用。

2 个答案:

答案 0 :(得分:1)

整页重定向会破坏原始页面,所以不会,您无法进行后续重定向,只需更新一个<DIV>即可将用户带回原始页面。

您至少有两种选择:

  1. 只需完整页面重定向,当身份验证结果从提供程序返回时,您的MVC控制器将重新呈现整个原始页面。缺点:控制器无法从之前的其他视图中恢复任何特定于用户的状态。

  2. 使用弹出窗口记录用户,当登录完成时弹出窗口自行关闭,将身份验证数据传回父页面,然后可以重新呈现它想要的任何部分。

  3. DotNetOpenAuth支持这两种方法,但当然,在库外部的控制器和视图中有大量代码需要编写。我有一个样本,演示了一个相对优雅的#2实现。它位于http://openidux.dotnetopenauth.net/,但该网站现在似乎已关闭。但您可以在此处查看屏幕截图并下载项目模板:http://visualstudiogallery.msdn.microsoft.com/81153747-70d7-477b-b85a-0374e7edabef

答案 1 :(得分:0)

您可以将数据存储在会话中,使用缓存或使用TempData。 缓存当然会自行清除,因此无需维护。

TempData将在读取后自行清除。因此,即使不将其存储在数据库中,您也可以再次访问此数据。