


Implémentation de la fonction de connexion utilisateur asp.net jQuery Ajax
Jan 12, 2017 pm 01:58 PMExtrait de code d'appel de la page principale?:
<asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="#" >登錄</asp:HyperLink> <script language="javascript" type="text/javascript"> $('#<%=this.lnkLogin.ClientID %>').click( function(){ jBox.open('iframe-jBoxID','iframe','Login.aspx','用戶登錄 ','width=400,height=250,center=true,draggable=true,model=true'); } ); </script>
Code Login.aspx?:
<form id="form1" onsubmit="return false;"> <table id="login-table"> <tr> <td width="60">學(xué)號(hào):</td> <td><input class="textbox" type="text" style="width:160px;" id="txtUserName" maxlength="9" onblur="checkUserName()" onclick="$.trim(this.value)"/><span></span> </td> </tr> <tr> <td width="60">密碼:</td> <td><input class="textbox" type="password" style="width:160px;" id="txtUserPwd" onblur="checkUserPwd()" onclick="$.trim(this.value)" /><span></span> </td> </tr> <tr> <td width="60">驗(yàn)證碼:</td> <td><input class="textbox" type="text" style="width:160px;" maxlength="5" id="txtCheckCode" onblur="checkCheckCode()" onclick="$.trim(this.value)"/><span> </span> </td> </tr> <tr> <td width="60"></td> <td><div style="color:#808080;">輸入下圖中的字符,不區(qū)分大小寫</div><br /> <img src="CheckCode.aspx" style="vertical-align:middle;" alt="驗(yàn)證碼" id="imgCheckCode" /> <a href="#" id="change_image">看不清,換一張</a></td> </tr> <tr> <td width="60"></td> <td><input type="image" src="App_Themes/Images/btn_login.jpg" id="btnLogin" alt="馬上登錄" style="border:0;"/></td> </tr> </table> </form>
Code jQuery?:
<script language="javascript" type="text/javascript" > $(document).ready(function(){ // 驗(yàn)證碼更新 $('#change_image').click( function(){ $('#imgCheckCode').attr('src','CheckCode.aspx?'+Math.random()); }); //關(guān)鍵的代碼 $("#btnLogin").click(function(){ if(checkUserName() && checkUserPwd() && checkCheckCode()) { var data = { UserName: $('#txtUserName').val(), UserPwd: $('#txtUserPwd').val(), CheckCode: $('#txtCheckCode').val() }; //提交數(shù)據(jù)給Login.ashx頁面處理 $.post("Ajax/Login.ashx",data,function(result){ if(result == "1") //登錄成功 { alert("登錄成功!您可以進(jìn)行其他操作了!"); // 關(guān)閉模擬窗口 window.parent.window.jBox.close(); } else if(result == "2") //驗(yàn)證碼錯(cuò)誤 { $('#txtCheckCode').next("span").css("color","red").text("* 驗(yàn)證碼錯(cuò)誤"); } else { alert("登錄失敗!請(qǐng)重試"); } }); } else { checkUserName(); checkUserPwd(); checkCheckCode(); } }); }); //check the userName function checkUserName() { if($("#txtUserName").val().length == 0) { $("#txtUserName").next("span").css("color","red").text("*用戶名不為空"); return false; } else { var reg = /^\d{9}$/; if(!reg.test($('#txtUserName').val())) { $('#txtUserName').next("span").css("color","red").text("*正確的格式 如:030602888"); return false; } else { $("#txtUserName").next("span").css("color","red").text(""); return true; } } } //check the pwd function checkUserPwd() { if($('#txtUserPwd').val().length == 0) { $('#txtUserPwd').next("span").css("color","red").text("*密碼不為空"); return false; } else { $('#txtUserPwd').next("span").css("color","red").text(""); return true; } } // check the check code function checkCheckCode() { if($('#txtCheckCode').val().length == 0) { $('#txtCheckCode').next("span").css("color","red").text("*驗(yàn)證碼不為空"); return false; } else { $('#txtCheckCode').next("span").css("color","red").text(""); return true; } } </script>
Code Login.ashx?:
using System; using System.Collections; using System.Data; using System.Linq; using System.Web; using System.Web.Services; using System.Web.Services.Protocols; using System.Xml.Linq; using System.Data.SqlClient; using System.Web.SessionState; //支持session必須的引用 namespace Website.Ajax { [WebService(Namespace = "http://tempuri.org/")] [WebServiceBinding(ConformsTo = WsiProfiles.BasicProfile1_1)] public class Login : IHttpHandler,IRequiresSessionState { public void ProcessRequest(HttpContext context) { context.Response.ContentType = "text/plain"; string checkCode = ""; if (context.Session["checkCode"] != null) { checkCode = Convert.ToString(context.Session["checkCode"]).ToLower(); } if (context.Request.Form["CheckCode"].ToLower() == checkCode) { using (SqlConnection conn = new SqlConnection(SqlHelper.StudentConnectionString)) { string sql = "select ID,stuNumber,userPassword,realName from t_stuUser where stuNumber=@UserName and userPassword=@UserPwd"; SqlCommand cmd = new SqlCommand(sql, conn); SqlParameter pUserName = cmd.Parameters.Add("@UserName", SqlDbType.VarChar, 30); SqlParameter pUserPwd = cmd.Parameters.Add("@UserPwd", SqlDbType.VarChar, 150); pUserName.Value = context.Request.Form["UserName"]; pUserPwd.Value = Common.MD5(context.Request.Form["UserPwd"]); conn.Open(); SqlDataReader sdr = cmd.ExecuteReader(CommandBehavior.CloseConnection); if (sdr.Read()) { context.Session["UserID"] = Convert.ToString(sdr["ID"]); context.Session["StuName"] = Convert.ToString(sdr["realName"]); context.Session["StuNumber"] = Convert.ToString(sdr["stuNumber"]); context.Response.Write("1"); // 登錄成功 } else { context.Response.Write("0"); //登錄失敗,用戶名或密碼錯(cuò)誤 } } } else { context.Response.Write("2"); // 驗(yàn)證碼錯(cuò)誤 } } public bool IsReusable { get { return false; } } } }
Pour plus d'articles liés à l'implémentation de la fonction de connexion utilisateur asp.net jQuery Ajax, veuillez faire attention au site Web PHP chinois?!

Outils d'IA chauds

Undress AI Tool
Images de déshabillage gratuites

Undresser.AI Undress
Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover
Outil d'IA en ligne pour supprimer les vêtements des photos.

Clothoff.io
Dissolvant de vêtements AI

Video Face Swap
échangez les visages dans n'importe quelle vidéo sans effort grace à notre outil d'échange de visage AI entièrement gratuit?!

Article chaud

Outils chauds

Bloc-notes++7.3.1
éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise
Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1
Puissant environnement de développement intégré PHP

Dreamweaver CS6
Outils de développement Web visuel

SublimeText3 version Mac
Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Le c?ur de la conception d'objets immuables et de structures de données en C # est de s'assurer que l'état de l'objet n'est pas modifié après la création, améliorant ainsi la sécurité des threads et la réduction des bogues causés par les changements d'état. 1. Utilisez des champs en lecture et coopérez avec l'initialisation du constructeur pour vous assurer que les champs ne sont attribués que pendant la construction, comme indiqué dans la classe de personne; 2. Encapsulez le type de collection, utilisez des interfaces de collecte immuables telles que ReadOnlyCollection ou Immutablelist pour empêcher une modification externe des collections internes; 3. Utilisez l'enregistrement pour simplifier la définition du modèle immuable et générer des attributs en lecture seule et des constructeurs par défaut, adaptés à la modélisation des données; 4. Il est recommandé d'utiliser System.Collections.imm lors de la création d'opérations de collecte immuables.

La clé de la rédaction du code C # est la maintenabilité et la testabilité. Diviser raisonnablement les responsabilités, suivre le principe de responsabilité unique (SRP) et prendre respectivement l'accès aux données, la logique métier et le traitement des demandes par le référentiel, le service et le contr?leur pour améliorer la clarté structurelle et l'efficacité des tests. L'interface polyvalente et l'injection de dépendance (DI) facilitent la mise en ?uvre du remplacement, l'extension des fonctions et les tests de simulation. Les tests unitaires doivent isoler les dépendances externes et utiliser des outils simulés pour vérifier la logique pour assurer une exécution rapide et stable. Standardiser la dénomination et la division de petites fonctions pour améliorer la lisibilité et l'efficacité de maintenance. L'adhésion aux principes de la structure claire, des responsabilités claires et des tests peut améliorer considérablement l'efficacité du développement et la qualité du code.

Créez un middleware personnalisé dans ASP.Netcore, qui peut être implémenté en écrivant des classes et en s'inscrivant. 1. Créez une classe contenant la méthode invokeaSync, gérez httpContext et requestdelegateNext; 2. Inscrivez-vous avec Usemiddleware dans Program.cs. Le middleware convient aux opérations générales telles que la journalisation, la surveillance des performances, la gestion des exceptions, etc. Contrairement aux filtres MVC, il agit sur l'ensemble de l'application et ne s'appuie pas sur le contr?leur. L'utilisation rationnelle du middleware peut améliorer la flexibilité structurelle, mais devrait éviter d'affecter les performances.

Les points suivants doivent être suivis lors de l'utilisation de LINQ: 1. La priorité est donnée à LINQ lors de l'utilisation des opérations de données déclaratives telles que le filtrage, la conversion ou l'agrégation des données pour éviter une utilisation forcée dans des scénarios avec des effets secondaires ou des scénarios critiques de performance; 2. Comprendre les caractéristiques de l'exécution retardée, les modifications de l'ensemble de source peuvent conduire à des résultats inattendus, et les retards ou l'exécution doivent être sélectionnés en fonction des exigences; 3. Faites attention aux frais généraux de performances et de mémoire, les appels de cha?ne peuvent générer des objets intermédiaires et les codes sensibles aux performances peuvent être remplacés par des boucles ou des portées; 4. Gardez la requête concise et facile à lire, et divisez la logique complexe en plusieurs étapes pour éviter une nidification excessive et un mélange de plusieurs opérations.

Des contraintes génériques sont utilisées pour restreindre les paramètres de type pour assurer un comportement spécifique ou des relations d'héritage, tandis que la covariation permet la conversion du sous-type. Par exemple, où: ICOMPARABLE garantit que t est comparable; La covariation telle que IEnumerable permet à IEnumerable d'être convertie en IEnumerable, mais elle n'est lue et ne peut pas être modifiée. Les contraintes courantes incluent la classe, la structure, new (), la classe de base et l'interface, et plusieurs contraintes sont séparées par des virgules; La covariation nécessite le mot-clé OUT et ne s'applique qu'aux interfaces et délégués, ce qui est différent de l'onduleur (en mot-clé). Notez que la covariance ne prend pas en charge les classes, ne peut pas être convertie à volonté et que les contraintes affectent la flexibilité.

Les problèmes communs avec asynchronisation et attendre en C # incluent: 1. Utilisation incorrecte de .Result ou .Wait () provoque une impasse; 2. Ignorer ConfigureAwait (False) provoque des dépendances contextuelles; 3. L'abus d'AsyncVoid provoque un contr?le manquant; 4. L'attente en série affecte les performances de la concurrence. La bonne fa?on est: 1. La méthode asynchrone doit être asynchrone tout le chemin pour éviter le blocage de la synchronisation; 2. L'utilisation de ConfigureAwait (false) dans la bibliothèque de classe est utilisée pour s'écarter du contexte; 3. Utiliser uniquement AsyncVoid dans le traitement des événements; 4. Les taches simultanées doivent d'abord être démarrées, puis attendre pour améliorer l'efficacité. Comprendre le mécanisme et normaliser l'utilisation du code asynchrone qui évite d'écrire un blocage substantiel.

L'interface Fluent est une méthode de conception qui améliore la lisibilité du code et l'expressivité à travers les appels de cha?ne. Le noyau est que chaque méthode renvoie l'objet actuel, afin que plusieurs opérations puissent être appelées en continu, comme Varresult = NewstringBuilder (). APPEND ("Hello"). Ajouter (""). Lors de la mise en ?uvre, vous devez combiner la méthode d'extension et le modèle de conception qui le renvoie, tels que la définition de la classe CluentString et le renvoi dans sa méthode, et la création d'une instance initiale via la méthode d'extension. Les scénarios d'application courants incluent la création de configurateurs (tels que les règles de vérification), la vérification

La bonne fa?on d'utiliser l'injection de dépendance dans les projets C # est la suivante: 1. Comprendre l'idée principale de DI est de ne pas créer d'objets par vous-même, mais de recevoir des dépendances par le biais de constructeurs pour obtenir un couplage lache; 2. Lors de l'enregistrement des services dans ASP.Netcore, vous devez clarifier le cycle de vie: transitoire, portée, singleton et choisir selon les besoins de l'entreprise; 3. Il est recommandé d'utiliser l'injection de constructeur, et le cadre analysera automatiquement les dépendances, qui conviennent aux contr?leurs et aux services; 4. Les conteneurs intégrés peuvent être utilisés dans de petits projets, et des conteneurs tiers tels que AutoFAC peuvent être introduits dans des scénarios complexes, et l'enregistrement de service personnalisé et la lecture de configuration sont pris en charge. La ma?trise de ces points clés peut aider à améliorer la testabilité, la maintenabilité et l'évolutivité de votre code.
