Visual Studio 2010 和 Microsoft SQL 2008 - 使用 ASP.NET (JQuery, Json 和 Web 服务) 的身份验证系统
如何在 ASP.NET C# 中使用 JQuery 直接调用服务器端方法或函数
引言
在本文中,我们将了解应用程序的登录页面。 这是任何想使用我们应用程序的用户将要面对的第一个页面,也是本节中最重要的页面。 登录脚本在此应用程序中起着非常重要的作用。
背景
身份验证系统允许只有少数选定的人才能访问某些在线材料。 本教程说明了使用 ASP.NET 构建身份验证系统的基本结构。
在本教程中,我将使用 JQuery 向服务器发出 AJAX 调用。 我还将解释如何在 ASP.NET C# 中使用 JQuery 直接调用服务器端方法或函数。
概述
- 在 Visual Studio 中创建项目
- 解决方案资源管理器
- 数据库
- 创建表
- 插入语句
- 创建存储过程
- Web.Config
- 服务器端
- 客户端
在 Visual Studio 中创建项目
打开 Visual Studio 2010 并创建一个新项目,如下所示
解决方案资源管理器
默认情况下,当您在 Visual Studio 2010 中创建一个新的网站时,Jquery 会添加到您的项目中,如下图所示
数据库
我将认为您知道如何创建数据库,否则我创建了一个名为 testing 的数据库。
UserLogin 表
创建一个名为 userLogin 的表。
CREATE TABLE [dbo].[UserLogin](
[loginid] [bigint] IDENTITY(1,1) NOT NULL,
[username] [varchar](30) NOT NULL,
[password] [varchar](50) NOT NULL,
[email] [varchar](255) NOT NULL,
[user_type] [varchar](45) NOT NULL,
[disabled] [bit] NOT NULL,
[activated] [bit] NOT NULL,
CONSTRAINT [PK_UserLogin] PRIMARY KEY CLUSTERED
(
[username] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF,
IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON,
ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
正如您所看到的,username 是主键,用于防止重复的用户名,而 loginid
是标识(自动递增)。
插入记录
将记录插入到 UserLogin
表中。
INSERT INTO USERLOGIN VALUES ('aamir','hasan','hasan@studentacad.com','user',0,0)
INSERT INTO USERLOGIN VALUES ('admin','admin','aamirhasan@studentacad.com','admin',0,0)
存储过程
我创建了一个名为 spx_checkuserlogin
的存储过程。 如果用户不存在于 Userlogin
表中,则存储过程将返回 0
,否则它将返回用户 ID。
CREATE PROCEDURE [dbo].[SPX_CHECKUSERLOGIN]
@USERNAME VARCHAR(50),
@PASSWORD VARCHAR(50)
AS
BEGIN
declare @value bigint
SET NOCOUNT ON;
SELECT @value= LOGINID FROM USERLOGIN
WHERE USERNAME = @USERNAME AND PASSWORD = @PASSWORD
AND [DISABLED]=0
select ISNULL(@value,0)
END
服务器端
我创建了 WebMethod
,它将接受用户名和密码并发送到存储过程。
[System.Web.Services.WebMethod]
public static string CheckUserName(string userName,string passWord)
{
string returnValue = string.Empty;
try
{
string consString = ConfigurationManager.ConnectionStrings
["testingConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(consString);
SqlCommand cmd = new SqlCommand("SPX_CHECKUSERLOGIN", conn);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.AddWithValue("@UserName", userName.Trim());
cmd.Parameters.AddWithValue("@password", passWord.Trim());
conn.Open();
returnValue = cmd.ExecuteScalar().ToString();
conn.Close();
}
catch(Exception ee)
{
returnValue = "error message: " + ee.Message;
}
return returnValue;
}
注意: 方法应该是 static
。
客户端
在 aspx 页面中,HTML 将收集用户名、密码字段和输入按钮,名称为 Login。
<div>
Username : <asp:TextBox ID="txtUserName" runat="server"
onkeyup = "OnKeyUp(this)" /><br />
Password: <asp:TextBox ID="txtPassWord"
TextMode=Password runat="server" onkeyup ="OnKeyUp(this)"/><br />
<input id="btnCheck" type="button" value="Login" onclick = "CheckUserLogin()" />
<br />
<span id = "message"> </spa
</div>
JQuery
Jquery 用于调用服务器端方法,该方法将发送用户名和密码,并从服务器端代码获取响应。
function CheckUserLogin() {
$.ajax({
type: "POST",
url: "default.aspx/CheckLogin",
data: '{userName: "' + $("#<%=txtUserName.ClientID%>")[0].value +
'",passWord: "' + $("#<%=txtPassWord.ClientID%>")[0].value + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function (response) {
alert(response);
}
});
“'{userName: "' + $("#<%=txtUserName.ClientID%>")[0].value + '",passWord: "' + $("#<%=txtPassWord.ClientID%>")[0].value + '" }',
” data 参数表示用户名和密码 JSON 对象。
上面的 jQuery 具有以下属性和值,如下所示
$.ajax({
type:Reuest Type
url:Page URL/Method name.
data:Values.
dataTyle:"json".
success:Success Method.
});
现在在您的 Head
中添加 JQuery 的引用,在页面的顶部第二个位置。
<script src="Scripts/jquery-1.4.1.min.js" type="text/javascript"></script>
<script type = "text/javascript">
function OnKeyUp(txt) {
$("#message")[0].innerHTML = "";
}
function CheckUserLogin() {
$.ajax({
type: "POST",
url: "default.aspx/CheckLogin",
data: '{userName: "' + $("#<%=txtUserName.ClientID%>")[0].value +
'",passWord: "' + $("#<%=txtPassWord.ClientID%>")[0].value + '" }',
contentType: "application/json; charset=utf-8",
dataType: "json",
success: OnSuccess,
failure: function (response) {
alert(response);
}
});
}
function OnSuccess(response) {
var mesg = $("#message")[0];
if (response.d == 0) {
mesg.style.color = "red";
mesg.innerHTML = "Invalid Username and Password;";
} else if (response.d > 0) {
mesg.style.color = "green";
mesg.innerHTML = "User ID:" + response.d.toString();
} else {
mesg.style.color = "red";
mesg.innerHTML = "Error:" + response.d.toString();
}
}
</script>
正如您将注意到的,我只是在 Default.aspx 页面中调用 CheckLogin
服务器端函数,并将 TextBox
值作为参数传递。 其次,我定义了 success 方法 OnSuccess
,该方法将被调用来处理服务器返回的响应。
历史
- 2010 年 5 月 9 日:首次发布