在ASP.net c#中,是否有一种方法可以将控制从Javascript传递到CS

本文关键字:控制 方法 Javascript CS 一种 net ASP 是否 | 更新日期: 2023-09-27 18:15:21

我正试图实现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>

但如果控制是目前在一个javascript函数从Facebook完成后-我不希望用户然后必须手动点击一个按钮继续-理想情况下,他们点击Facebook登录按钮,我调用Facebook api,然后页面重定向存储的信息。

在ASP.net c#中,是否有一种方法可以将控制从Javascript传递到CS

使用PageMethods和Ajax

确保包含以下using语句:

using System.Web.Services;

你的pagememethod应该是这样的:

[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来获取要发回的页面。最快,最简单和最黑客的方式做到这一点是有一个asp按钮与一个普通的服务器端点击处理程序,是通过CSS隐藏。然后使用以下示例中的javascript (jquery)来单击按钮。

<<p> 按钮/strong>
<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),您需要向应用程序中的控制器方法发送一个post,该方法将保存数据。参见jQuery .post()文档

如果不使用MVC,像AJAX控件工具包之类的东西可能会工作。我已经很长时间没有做MVC的工作了,我不知道在那里做AJAX的最新方法是什么。

在MVC中,只需创建一个控制器并使用jquery ajax发送到控制器方法。

或者,在WebForms

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

LoginStuff.ashx

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

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

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

在这段代码中,它说"//登录到你的应用程序和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调用它。登录函数valSubmit() {var doc = document.forms[0];doc.submit ();返回true;}其中form[0]是实际的form。您将在CS代码中获得回发