繁体   English   中英

在ASP.net C#中,有没有一种方法可以将控制权从Java脚本传递给CS?

[英]In ASP.net C# is there a way I can pass control to my CS from Javascript?

我正在尝试按照以下指南在我的应用程序中实现Facebook登录: https : //developers.facebook.com/docs/facebook-login/login-flow-for-web/v2.0

Facebook的东西都工作正常:)

但是,在完成Facebook身份验证之后,我想将所有适当的变量传递到网页后面的C#代码中,以输入到我的数据库中,然后再重定向到注册过程的下一部分。

我知道如何使用HTML中的asp标记来做到这一点:

<asp:ImageButton id=ctrlNext runat="server" ImageUrl="Btn_Next.gif" onclick="ctrlNext_Click"></asp:ImageButton>

但是,如果从Facebook完成后控件当前位于javascript函数之内-我不希望用户随后必须手动单击按钮以继续-理想情况下,他们单击facebook登录按钮,我调用facebook API,然后页面重定向已存储信息。

使用PageMethods和Ajax

确保使用陈述包括以下内容:

using System.Web.Services;

您的PageMethod类似于:

[WebMethod]
public static string fbLogin()
{
  /* Do your DB Magic Here */
}

使用jQuery.ajax方法:

FB.login(function(response) {
  if (response.status === 'connected') {
    // Logged into your app and Facebook.
    $.ajax({
       type: "POST",
       url: "YouPageName.aspx/fbLogin",
       data: "{}",
       contentType: "application/json; charset=utf-8",
       dataType: "json",
       success: function(msg) {
       // Do something interesting here.
       //Like a redirect 
          document.location.href = "http://www.somewherecool.com/newPage.aspx";
     }
    });
  } else if (response.status === 'not_authorized') {
    // The person is logged into Facebook, but not your app.
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
  }
});

这只是让您入门的基础。 不要忘记充实错误处理等。

然而

当您要进行重定向时,您有点无法实现AJAX的目的。 有几种使用javascript来获取页面回发的方法。 最快,最简单,最hackest的方法是使用带有通过CSS隐藏的普通服务器端点击处理程序的asp按钮。 然后在以下示例中使用javascipt(jquery)单击该按钮。

纽扣

<asp:ImageButton id="ctrlNext" style="display:none" runat="server" ImageUrl="Btn_Next.gif" onclick="ctrlNext_Click"></asp:ImageButton>

javascript

FB.login(function(response) {
  if (response.status === 'connected') {
    // Logged into your app and Facebook.
    //CLick the button
     $("#<%=ctrlNext.ClientID%>").click();
  } else if (response.status === 'not_authorized') {
    // The person is logged into Facebook, but not your app.
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
  }
});

通常,(假设您使用的是MVC)您需要在应用程序中的控制器方法中发布信息,以保存数据。 请参阅jQuery .post()文档

如果不使用MVC,则可能会使用AJAX Control Toolkit之类的工具 自从我没有进行MVC工作以来已经有很长的时间了,所以我不了解在那里进行AJAX的最新方法。

在此代码中,其显示为“ //登录到您的应用程序和Facebook”。 您可以调用控制器方法并传递令牌和其他所需的参数,从而将参数保存到DB并重定向到您的主页或启动页面。

FB.login(function(response) {
  if (response.status === 'connected') {
    // Logged into your app and Facebook.
  } else if (response.status === 'not_authorized') {
    // The person is logged into Facebook, but not your app.
  } else {
    // The person is not logged into Facebook, so we're not sure if
    // they are logged into this app or not.
  }
});

编辑1-

在WebForms中,您可以像下面这样编写js,然后从FB.login函数valSubmit()中调用它。{var doc = document.forms [0]; doc.submit(); 返回true; }其中form [0]是您的实际形式。 您将获得CS代码的回发

在MVC中,只需创建一个控制器,然后使用jquery ajax将其发布到控制器方法即可。

或者,在WebForms中

创建一个通用的HTTP处理程序,例如

LoginStuff.ashx

在控制器上创建一个方法,该方法使用JavascriptSerializer类返回字符串并返回JSON字符串。

然后以相同的方式调用ASHX处理程序jQuery Ajax。

您可以将数据发布到ashx处理程序,然后javascript端的ajax Success方法将返回您的方法返回的JSON对象。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM