Jquery 使用部分视图更新asp.net MVc 4视图的部分

Jquery 使用部分视图更新asp.net MVc 4视图的部分,jquery,asp.net,ajax,asp.net-mvc,asp.net-mvc-4,Jquery,Asp.net,Ajax,Asp.net Mvc,Asp.net Mvc 4,我正在开发asp.NETMVC4应用程序。我的主要观点上有一个行动链接,如下所示: @Ajax.ActionLink("Get LinkedIn Profile","LinkedIn", new AjaxOptions { UpdateTargetId="partialDiv", // <-- DOM element ID to update InsertionMode

我正在开发asp.NETMVC4应用程序。我的主要观点上有一个行动链接,如下所示:

  @Ajax.ActionLink("Get LinkedIn Profile","LinkedIn", new AjaxOptions
                 {
                     UpdateTargetId="partialDiv", // <-- DOM element ID to update
                     InsertionMode = InsertionMode.Replace, // <-- Replace the content of DOM element
                     HttpMethod = "GET" // <-- HTTP method
                 })
            <div id="partialDiv"></div>
 public ActionResult LinkedInAuthorized(string code, string state)
        {
         // some code here
        return PartialView("LinkedInProfileInfo", returnVal);
        }
现在,从LinkedIn授权,我想返回partialview或一些应该插入PartialIV的内容,所以我这样做:

  @Ajax.ActionLink("Get LinkedIn Profile","LinkedIn", new AjaxOptions
                 {
                     UpdateTargetId="partialDiv", // <-- DOM element ID to update
                     InsertionMode = InsertionMode.Replace, // <-- Replace the content of DOM element
                     HttpMethod = "GET" // <-- HTTP method
                 })
            <div id="partialDiv"></div>
 public ActionResult LinkedInAuthorized(string code, string state)
        {
         // some code here
        return PartialView("LinkedInProfileInfo", returnVal);
        }
但它将替换整个视图,而不是在该div中插入部分视图


请向我推荐解决方案。

尝试在partialDiv中使用Html.RenderPartial。像这样:

<div id="partialDiv">
  @{ Html.RenderPartial("LinkedInProfileInfo", returnVal); }
</div>

@{Html.RenderPartial(“LinkedInProfileInfo”,returnVal);}

returnVal可能不是此处的正确值。它也可能是模型(对不起,我是MVC新手)。

您需要后退一步,重新评估您正在尝试做的事情。对AJAX和OAuth进行更多的研究也不会有什么坏处,因为您显然不太熟悉这些概念

首先,让我们从OAuth进程开始。首先,您需要将用户引导到提供商的页面,在本例中是LinkedIn。在那里,用户将向提供商授权,然后提供商将使用有效负载发回您站点上的指定页面。您的应用程序解密该有效负载,存储任何相关细节,例如在以后的请求中使用的身份验证令牌,然后该过程就完成了。这不能通过AJAX实现。一旦拥有了auth令牌,就可以使用AJAX执行任何操作,但初始授权是同步的

现在,您的AJAX。AJAX可以看作是一个简单的HTTP客户机。您的浏览器也是HTTP客户端,但要复杂得多。这种复杂性的一部分在于提供一种看不见的用户体验,而不管幕后涉及多少请求。然而,AJAX处理的是一个简单的请求-响应周期。现在,让我们看看为什么这是一个重要的区别

浏览器请求您的
LinkedIn
操作

GET /url/to/linkedin/action
> HTTP/1.1 302
> Location: https://www.linkedin.com/uas/oauth2/authorization...

GET https://www.linkedin.com/uas/oauth2/authorization...
> HTTP/1.1 200
> (crap ton of HTML)
AJAX请求您的
LinkedIn
操作:

GET /url/to/linkedin/action
> HTTP/1.1 302
> Location: https://www.linkedin.com/uas/oauth2/authorization...

请看,浏览器知道,由于您的原始URL被重定向,您可能希望实际转到那里,因此它会发出另一个请求,请求重定向的URL。AJAX没有这样的假设。它发送了请求并得到了响应,所以就完成了。您可以发出另一个AJAX请求继续。因此,即使您可以使用AJAX进行OAuth授权,您也不能这样做。

确保您的计算机上有一个对AJAX.untrusive的引用view@MattBodily我们是否可以在不进行ajax调用的情况下渲染部分视图,因为在我的示例中它不是ajax调用。这不是典型的ajax调用,但您的链接具有ajax选项,因此它正在进行ajax调用。它是重定向而不是填充div,因为缺少引用感谢非常好的解释。如何使用第二个操作结果LinkedInAuthorized返回的json并更新视图div?