[英]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.