Suche nach Wörtern mit zusätzlichen Operatoren. Erstellen und Vorbereiten einer Datenbank

Jeder ASP.NET-Entwickler muss mit Seitendirektiven vertraut sein. Wenn Sie ein Anfänger sind und mehr über die Seitenrichtlinien erfahren möchten, können Sie diesen Artikel lesen.

Die erste Frage bezieht sich also auf Seitendirektiven.

Was ist eine Seitenrichtlinie?

Grundsätzlich sind Seitendirektiven Befehle. Diese Befehle werden vom Compiler verwendet, wenn die Seite kompiliert wird.

So verwenden Sie die Anweisungen in einer ASP.NET-Seite

Es ist nicht schwierig, einer ASP.NET-Seite eine Direktive hinzuzufügen. Es ist einfach, Direktiven zu einer ASP.NET-Seite hinzuzufügen. Sie können Anweisungen im folgenden Format schreiben:

<%@%>

Siehe Direktivenformat, es beginnt mit "<%@" and ends with "%>". Der beste Weg ist, die Direktive oben auf Ihrer Seite zu platzieren. Aber Sie können eine Direktive überall auf einer Seite platzieren. Außerdem können Sie mehr als ein Attribut in eine einzelne Direktive einfügen.

Hier ist die vollständige Liste der Richtlinien:

  • @Buchseite
  • @Meister
  • @Kontrolle
  • @Importieren
  • @Implementierungen
  • @Registrieren
  • @Montage
  • @MasterType
  • @Ausgabe-Cache
  • @PreviousPageType
  • @Bezug

Lassen Sie uns etwas über jede Direktive besprechen.

Wenn Sie die Attribute für eine ASP.NET-Seite angeben möchten, müssen Sie die @Page-Direktive verwenden. Wie Sie wissen, ist eine ASP.NET-Seite ein sehr wichtiger Bestandteil von ASP.NET, daher wird diese Direktive häufig in ASP.NET verwendet.

<%@Page Language="C#" AutoEventWIreup="false" CodeFile="Default.aspx.cs" Inherits="_Default"%>

Jetzt haben Sie einige Informationen über @Page-Direktiven. Die @Master-Direktive ist der @Page-Direktive ziemlich ähnlich. Der einzige Unterschied besteht darin, dass die Direktive @master für Masterseiten gilt. Sie müssen beachten, dass Sie bei Verwendung der @Master-Direktive die Eigenschaften der Vorlagenseite definieren. Dann kann jede Inhaltsseite alle in der Master-Seite definierten Eigenschaften erben. Es gibt jedoch einige Eigenschaften, die nur in einer Master-Seite verfügbar sind.

<%@Master Language="C#" AutoEventWIreup="false" CodeFile="MasterPage1.master.cs" Inherits="MasterPage"%>

@Kontrolle

@Control erstellt ASP.NET-Benutzersteuerelemente. Wenn Sie die Direktive verwenden, definieren Sie die Eigenschaften, die von den Benutzersteuerelementen geerbt werden sollen, und diese Werte werden den Benutzersteuerelementen zugewiesen

<%@Control Language="C#" Explicit="True" CodeFile="WebUserControl.ascx.cs" Inherits="WebUserControl" %>

Wie Sie wissen, müssen Sie Namespaces in Ihrer .cs-Klasse definieren, bevor Sie eine C#- oder VB-Klasse verwenden. Die @Import-Direktive importiert also Namespaces. Diese Direktive unterstützt nur ein einziges Attribut "Namespace", und dieses Attribut nimmt einen Zeichenfolgenwert an, der den zu importierenden Namespace angibt. Eine Sache, die Sie beachten müssen, ist, dass die @Import-Direktive nicht mehr als ein Attribut/Wert-Paar enthalten kann. Sie können jedoch mehrere Zeilen verwenden.

<%@Import Namespace="System.Data"%>

@Implementierungen

Die @Implements-Direktive veranlasst die ASP.NET-Seiten, .NET-Framework-Schnittstellen zu implementieren. Diese Direktive unterstützt nur eine einzige Attributschnittstelle.

<%@Implements Interface="System.Web.UI.IValidator"%>

@Registrieren

Wenn Sie ein Benutzersteuerelement erstellen und dieses Benutzersteuerelement auf Ihre Seite ziehen, wird die Direktive @Register angezeigt. Diese Direktive registriert Ihr Benutzersteuerelement auf der Seite, sodass die Seite auf das Steuerelement zugreifen kann.

<%@ Register TagPrefix="MayTag Namespace="MyName.MyNameSpace" Assembly="MyAssembly"%>

@Montage

Die @Assembly-Direktive fügt Assemblys an die Seite oder ein ASP.NET-Benutzersteuerelement an, wodurch alle Assemblyklassen und Schnittstellen für die Klasse verfügbar sind. Diese Direktive unterstützt die beiden Attribute Name und src. Das Name-Attribut definiert den Assemblynamen und das src-Attribut definiert die Quelle der Assembly.

<%@Assembly Name="MyAssembly"%>
<%@Assembly src="MYAssembly.cs">

@MasterType

Die Direktive @MasterType verbindet einen Klassennamen mit der ASP.NET-Seite, um stark typisierte Verweise oder Member abzurufen, die in der angegebenen Masterseite enthalten sind. Diese Direktive unterstützt die beiden Attribute Typename und virtualpath. Typename legt den Namen der abgeleiteten Klasse fest, von der die stark typisierten oder Referenzmember abgerufen werden sollen, und virtualpath legt den Speicherort der Seite fest, von der diese abgerufen werden.

<%@MasterType VirtualPath="/MasterPage1.master"%>

@Ausgabecache

Es steuert die Ausgabe-Caching-Richtlinien einer ASP.NET-Seite.

<%@ OutputCache Duration ="180" VaryByParam="None"%>
@Previouspagetype

Diese Direktive gibt die Seite an, von der alle seitenübergreifenden Postings stammen.

@Bezug

Diese Anweisung erklärt, dass eine andere Seite oder ein Benutzersteuerelement zusammen mit der aktiven Seite oder dem aktiven Steuerelement konform sein muss. Diese Direktive unterstützt das einzelne Attribut virtualpath. Es legt den Speicherort der Seite oder des Benutzersteuerelements fest, von dem aus auf die aktive Seite verwiesen wird.

<%@Reference VirtualPayh="~/MyControl.ascx"%>

Letzte Worte

Ich hoffe, Sie bekommen hier einige Erkenntnisse. Bitte kommentieren Sie, wie Ihnen dieser Artikel gefällt. Ihre Kommentare sind sehr wertvoll für mich, denn nur Sie werden mir sagen, wo ich falsch liege und welche Verbesserungen ich vornehmen muss, um einen besseren Artikel zu schreiben. Bitte kommentieren Sie und geben Sie Ihr Feedback ab.

Was ist ein Gästebuch?

Natürlich sprechen wir hier über das typischste Gästebuch. Zunächst einmal ist dies ein System, das dem Benutzer die Möglichkeit bietet, Text einzugeben, eine Bewertung einer bestimmten Site auszuwählen und auch eigene Daten (Name, E-Mail, http usw.) anzugeben. Es ist auch ein System zum Präsentieren von Daten, die von verschiedenen Benutzern eingegeben wurden, mit der Möglichkeit zu navigieren und E-Mails an die Autoren der Nachrichten zu senden. Variationen sind auch mit unterschiedlichen Einstellungen und mit der Kontrolle des normativen Vokabulars möglich.

Was brauchen wir

Es wird natürlich davon ausgegangen, dass der Leser mit den Grundlagen der ASP- und SQL-Programmierung vertraut ist (dafür reicht die Kenntnis der ersten Teile dieses Artikels völlig aus). Außerdem benötigen wir Microsoft SQL Server 7.0 oder 2000, einen HTML- oder Texteditor (ich empfehle die Verwendung von Macromedia Dreamweaver UltraDev 4.0) und ein wenig Geduld.

Erstellen und Vorbereiten einer Datenbank

Um die Speicherung der von Benutzern eingegebenen Daten zu organisieren, benötigen Sie eine Tabelle, in der Sie Felder erstellen können, um den Namen des Benutzers, seine E-Mail-Adresse, das Land des Wohnsitzes, die Website-Adresse, die IP-Adresse, den Bewertungswert der Website-Benutzer auf einer Fünf-Punkte-Skala zu speichern, etc.:

Um das System einfach in bestehende Standorte zu integrieren, empfiehlt es sich, einen weiteren Tisch zum Speichern von Farb- und anderen Einstellungen einzuplanen. Damit können Sie die angegebenen Einstellungen zukünftig ändern, ohne die entsprechenden Parameter in den Quelltexten der Gästebuch-Anwendungsmodule zu ändern.

  • Führen Sie den Data Sources ODBC Configurator aus - Start->Settings->Control Panel->Administrative Tools->Data Sources ODBC.
  • Gehen Sie zur Registerkarte System-DSN und erstellen Sie eine neue Datenquelle, indem Sie auf Hinzufügen klicken.
  • Wählen Sie in der angezeigten Treiberliste den Datenbanktreiber Microsoft SQL Server aus und klicken Sie auf Weiter.
  • Geben Sie in der Zeile Name der Datenquelle den Namen Ihrer Datenbank an (im beschriebenen Beispiel ist Gustbook der Name, unter dem Sie in Zukunft darauf verweisen).
  • Geben Sie in der Zeile Server den Server an, zu dem die Verbindung hergestellt werden soll, und klicken Sie auf Weiter.
  • Wählen Sie den Authentifizierungsmodus Mit SQL Server…, legen Sie den Benutzernamen und das Passwort fest, um sich mit dem SQL-Server zu verbinden; Definieren Sie das Server-Kommunikationsprotokoll (Schaltfläche Client Configuration - TCP/IP) und klicken Sie zweimal auf Next und dann auf Finish.
  • Sie sehen Statistiken über die durchgeführten Aktionen, und Sie können die Schaltfläche Datenquelle testen verwenden, um die Datenquelle zu überprüfen.
  • Als Ergebnis sehen Sie eine Zeile in der Liste der Datenquellen in Ihrem System.

Nachdem die Datenbank fertig ist, können Sie direkt mit der Erstellung eines Gästebuchs fortfahren.

Integration des Systems in eine fertige Website

Es ist klar, dass das Gästebuch an sich keinen Sinn macht. Urteilen Sie selbst: Wer braucht schon eine Website, die ausschließlich dazu dient, die Meinungen der Leser zu sammeln? Denn um Meinungen über etwas zu sammeln, muss man dieses Etwas erst einmal ihrem Urteil präsentieren. Daher ist es notwendig, den Fragen im Zusammenhang mit der Vereinfachung der Einbettung des Systems in vorgefertigte Websites besondere Aufmerksamkeit zu widmen.

Um insbesondere die Systemanpassung für die charakteristischen Merkmale einer bestimmten Website zu vereinfachen, wird empfohlen (wie oben erwähnt), eine spezielle Tabelle zu erstellen, in der alle diese Einstellungen gespeichert werden, um bestimmte Werte einzugeben, die für Ihre Website spezifisch sind es. Der offensichtliche Vorteil dieses Ansatzes besteht darin, dass Sie zum Einbetten des Systems in eine bereits fertige Seite keine Änderungen im Quellcode der Module vornehmen müssen, sondern nur die Einstellungen in der entsprechenden Datenbanktabelle ändern müssen.

Stellen Sie sich ein Beispiel für die Implementierung einer solchen Tabelle vor: .

Wie Sie sehen können, gibt es Felder zum Speichern von Informationen über den Namen und das Passwort für den Zugriff auf den Systemeinrichtungsmodus, über die Farben des Haupthintergrunds der Benutzernachricht, die oberen und unteren Rahmen (Mid_Color-, Top_Color- bzw. Bot_Color-Felder) , über die Farbe und Größe der Kopfzeile des Formulars, das für die Eingabe von Benutzerdaten verwendet wird (Felder Form_Color bzw. FormTitleSize), über die Farbe, Größe und den Stil der Schriftart des Textes der Nachricht selbst, Informationsfelder sowie die Gästebuchseiten selbst (Felder MessageFontColor, MessageFontSize, MessageFontFace, InfoFontColor, InfoFontSize, InfoFontFace, PageFontColor, PageFontSize bzw. der Manager oder Site-Administrator), Felder zum Speichern der E-Mail-Adresse der verantwortlichen Person, des Texts der Nachricht mit dem Dank für die vom Benutzer hinterlassene Nachricht, mit der Liste sind nicht zulässig x Wörter und einen Schalter für ihren Filtermodus (wenn letzterer aktiviert ist, werden die Wörter in der Liste der ungültigen Wörter automatisch im Nachrichtentext durch Sternchen ersetzt und somit wird die Kontrolle über die Normativität des Website-Textvokabulars ausgeübt) .

Die Entwicklung des Gästebuch-Integrationssystems impliziert die Organisation einer Webschnittstelle zur Einstellung aller von uns berücksichtigten Parameter (Felder der Verwaltungstabelle).

Die Integration des Systems in eine bereits fertige Site in seiner reinen Form kann sowohl bei der Wahrnehmung des Quelltextes als auch in Zukunft zu einigen Schwierigkeiten führen, wenn Sie beispielsweise das Gästebuch auf einer bestimmten Site vorübergehend deaktivieren müssen. Daher werden wir versuchen, ein System so zu entwickeln, dass seine Integration in eine fertige Website nicht schwierig ist. Dazu ist es notwendig, ein eigenständiges Modul des Systems zu bilden und es gegebenenfalls in den Text der Hauptseite aufzunehmen. Der Text Ihrer Website-Seite könnte also beispielsweise so aussehen:

ASP auf dem Silbertablett (Teil - 15) – Gästebuch

Wie Sie sehen können, ist im ersten Fall die Anweisung, eine Seite mit einem Gästebuch () an der richtigen Stelle angegeben, und im zweiten Fall wird die Seite der ursprünglichen Website einfach in Form von drei hintereinander eingefügten Elementen dargestellt: dem Anfang, der Gästebuchseite und dem Ende. Die Art und Weise, wie Sie die Seitenstruktur Ihrer Site organisieren, ist Geschmackssache und hängt sowohl von der Struktur der ursprünglichen Site als auch vom Grad ihrer Komplexität ab.

Gästebuch-Hauptseite (Guest.asp-Datei)

Die vorgestellte Anwendung wird nur eine Seite haben, die sowohl zum Anzeigen von Benutzernachrichten als auch zum Navigieren und Eingeben neuer Nachrichten dient. Abhängig von den Werten der Schlüsselparameter wird die eine oder andere Aktion ausgeführt und die Seite befindet sich in dem einen oder anderen Zustand. Zunächst müssen Sie den Teil davon entwickeln, der Benutzernachrichten anzeigt und Links zu dem Teil enthält, der dazu dient, neue Nachrichten hinzuzufügen.

Lassen Sie uns zunächst ein paar Funktionen für die Arbeit mit Strings schreiben:

  1. Die Funktion zum Ersetzen einer leeren Zeichenfolge durch ein Leerzeichen und eines einfachen Anführungszeichens durch ein doppeltes:<% Function ChkString(string) If string = "" then string = " " ChkString = Replace(string, """, """") End Function %>
  2. Die Funktion, das Vokabular des Nachrichtentextes auf Normativität zu prüfen. Wenn Wörter mit Wörtern aus der Liste der ungültigen Wörter übereinstimmen, ersetzen Sie sie durch Sternchen:<% Function ChkBadWords(String2) strBadWords = objRec2("BadWords") bwords = split(strBadWords, "|") For i = 0 to ubound(bwords) String2 = Replace(String2, bwords(i), string(len(bwords(i)),"*"), 1,-1,1) Next ChkBadWords = String2 end function %>
  3. Die Funktion zum Formatieren des vom Benutzer eingegebenen Textes. Bei Bedarf (sofern ein entsprechendes Flag in der Datenbank vorhanden ist) wird der Text auf Normativität geprüft (gefiltert):<% Function FormatStr(String) on Error resume next String = Server.HTMLEncode(String) String2 = Replace(String, CHR(13), "") String2 = Replace(String, CHR(10) & CHR(10), "

    ") Zeichenfolge2 = Ersetzen (Zeichenfolge, CHR(10), "
    ") If objRec2("BadOn") = True then String2 = ChkBadWords(String2) End if FormatStr = String2 End Function %>

  4. Feldprüffunktion:<% Function ValidateField(sFieldValue, sFieldType) Valid = True Select Case LCase(sFieldType) Case "name" If Len(sFieldValue) = 0 Then Valid = False Case "message" If Len(sFieldValue) = 0 Then Valid = False End Select ValidateField = Valid End Function %>
  5. Das Verfahren zum Hinzufügen neuer Nachrichten (achten Sie darauf, wie die IP-Adresse des Computers berechnet wird, von dem die Nachricht gesendet wurde):
<% Sub Update strSql = "insert into Messages (Name, Country, Email, URL,IP,Message,Rating) values ("" strSql = StrSql & ChkString(Request.Form("name")) & "", "" strSql = StrSql & ChkString(Request.Form("Country")) & "", "" strSql = StrSql & ChkString(Request.Form("email")) & "", "" strSql = StrSql & ChkString(Request.Form("URL")) & "", "" strSql = StrSql & Request.ServerVariables("REMOTE_ADDR") & "", "" strSql = StrSql & ChkString(Request.Form("Message")) & "", "" strSql = StrSql & ChkString(Request.Form("Rating")) & "")" objConn.Execute (StrSql) %>

Danach werden die Parameter Farben, Größen, Designschriften aus der entsprechenden Tabelle extrahiert und angewendet:

"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("FormTitleSize")%>">Vielen Dank für Ihren Eintrag in unser Gästebuch!

"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Klicken Sie hier, um Ihren Eintrag anzuzeigen

Senden Sie jetzt ggf. eine E-Mail an den Manager oder Administrator, um Sie über einen neuen Gästebucheintrag zu informieren:

<% If Not(Request.Form("email"))="" AND objRec2("AutoEmail")=True then Name = Request.Form("name") Email = Request.Form("email") sFrom = objRec2("YourEmail") sTo=Email sSubject = "Спасибо, Ваша запись в нашей гостевой книге принята!" sMessage = "Дорогой(ая) " & Name & vbcrlf _ & vbcrlf _ & objRec2("ThankMessage") & vbcrlf _ & vbcrlf _ & vbcrlf Set objNewMail = CreateObject("CDONTS.NewMail") objNewMail.Send sFrom, sTo, sSubject, sMessage Set objNewMail = Nothing End If If objRec2("YouEmail")=True then Name = Request.Form("name") Home_Page = Request.Form("url") Email = Request.Form("email") Message = Request.Form("message") Country = Request.Form("Country") Address = Request.ServerVariables("REMOTE_ADDR") Rating = Request.Form("Rating") If Rating ="0" then Rating="No Rating" End If sFrom = objRec2("YourEmail") sTo= objRec2("YourEmail") sSubject = "Новое сообщение" sMessage = "Привет," & vbcrlf _ & "Новое сообщение поступило в гостевую книгу" & vbcrlf _ & vbcrlf _ & ":" & vbcrlf _ & vbcrlf _ & Message & vbcrlf _ & vbcrlf _ & "Детали сообщения:" & vbcrlf _ & "Ваше имя: " & Name & vbcrlf _ & "Email: " & Email & vbcrlf _ & "URL: " & Home_Page & vbcrlf _ & "Страна: " & Country & vbcrlf _ & "Рейтинг: " & Rating & vbcrlf _ & "Адрес: " & Address Set objNewMail = CreateObject("CDONTS.NewMail") objNewMail.Send sFrom, sTo, sSubject, sMessage Set objNewMail = Nothing End If End Sub %>

Formular zur Eingabe neuer Werte

Es ist auch ratsam, in den Vorgang die Anzeige eines Formulars einzubeziehen, das zum Hinzufügen neuer Nachrichten dient (beachten Sie, dass das Formular in sich geschlossen ist, dh das Modul, das es enthält, dient als Reaktion darauf):

<% Sub ShowForm(Sign) %>

>
"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("FormTitleSize")%>"> Hinterlassen Sie einen Eintrag in unserem Gästebuch

">* Kennzeichnet Felder, die man sich merken muss

colspan=2> "farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Ihr Name: *
"Größe=30> <% If dictFields(LCase("name")) Then Response.Write "Sie müssen einen Namen eingeben
" Else Response.Write "
" Beenden, wenn %>
colspan=2> "farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Email:
"Größe=30>
colspan=2> "farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> URL:
"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> http:// "Größe=30>
colspan=2> "farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Land:
"Größe=30>
"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Wie bewerten Sie unsere Website?
"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%> ">Deine Kommentare: *
"color="red" size="-2"><% If dictFields(LCase("message")) Then Response.Write "Вы не ввели сообщение
" Else Response.Write "
" Beenden, wenn %>
<% End Sub %>

Darauf folgt die Hauptfunktion zum Anzeigen einer festen Anzahl von Benutzernachrichten (der Wert, der aus der Tabelle mit den administrativen Einstellungen abgerufen wird):

<% Sub Show NumPerPage=INT(objRec2("NumPerPage")) If Request.QueryString("page") = "" Then iPageCurrent = 1 Else iPageCurrent = CInt(Request.QueryString("page")) End If Set objRec = Server.CreateObject ("ADODB.Recordset") StrSql = "SELECT * FROM Messages ORDER BY ID DESC;" objRec.PageSize = NumPerPage objRec.CacheSize = NumPerPage objRec.Open StrSql,objConn,3,1,&H0001 iPages = objRec.PageCount TotalRows = objRec.RecordCount If iPageCurrent >iPages Then iPageCurrent = iPages If iPageCurrent< 1 Then iPageCurrent = 1 If iPages = 0 Then Response.Write "Не найденно записей!" Else ObjRec.AbsolutePage = iPageCurrent %>

"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Insgesamt im Buch <%=TotalRows%> Einträge an <%=iPages%> Seite(n)

<% iRecordsShown = 0 Do While iRecordsShown < NumPerPage And Not objRec.EOF Rating = ObjRec("Rating") If IsNull(Rating) or Rating="0" then Rating = "nr" Else Rating = ObjRec("Rating") End If If IsNull(ObjRec("URL")) then Link = "Не указан URL" Else Link = "http://" & ObjRec("URL") & "" End If Email = FormatStr(ObjRec("Email")) Name = FormatStr(ObjRec("Name")) %>
"> "farbe="<%=objRec2("InfoFontColor")%>"Größe="<%=objRec2("InfoFontSize")%>"><%=ObjRec("DateID") %> "> "farbe="<%=objRec2("InfoFontColor")%>"Größe="<%=objRec2("InfoFontSize")%>">Seitenbewertung: .gif" height="14" width="65">
"> "farbe="<%=objRec2("MessageFontColor")%>"Größe="<%=objRec2("MessageFontSize")%>"><%=FormatStr(ObjRec("Message"))%>
"> "farbe="<%=objRec2("InfoFontColor")%>"Größe="<%=objRec2("InfoFontSize")%>"> <% If IsEmpty(Email) or Email=" " then Response.Write Name Else Response.Write "" & Namensende wenn %> "> "farbe="<%=objRec2("InfoFontColor")%>"Größe="<%=objRec2("InfoFontSize")%>"><%=FormatStr(ObjRec("Country")) %> IP:<%= ObjRec("IP") %> "> "farbe="<%=objRec2("InfoFontColor")%>"Größe="<%=objRec2("InfoFontSize")%>"> <%=Link%>

<% iRecordsShown = iRecordsShown + 1 objRec.MoveNext Loop if iPages >1 dann %>

"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>"> Seiten: <% For I = 1 To iPages If I = iPageCurrent Then Response.Write ""&ICH&"" Else Response.Write " "&ICH&""Beenden, wenn nächste Antwort.Schreiben"" Else Response.Write " " End If End If objRec.Close Set objRec = Nothing End Sub %>

Achten Sie darauf, wie der Link zum Anzeigen der nächsten Seite mit einer solchen „Portion“ von Nachrichten gebildet und implementiert wird:

Antwort.Schreiben" "&ICH&" "

Wie Sie sehen, wird ihm die Seitennummer als Wert des Seitenparameters übergeben, und anschließend, wenn dieser Wert ungleich 1 ist, beginnt die Anzeige von Nachrichten nicht mit der ersten Nachricht, sondern mit der, die wird sei der erste auf der Seite mit der entsprechenden Nummer, die im Parameter angegeben ist:

<% NumPerPage=INT(objRec2("NumPerPage")) If Request.QueryString("page") = "" Then iPageCurrent = 1 Else iPageCurrent = CInt(Request.QueryString("page")) End If %>Es folgt der Quellcode des Moduls selbst, in dem die Verbindung zur Datenbank hergestellt und Datensätze (im beschriebenen Beispiel wird dies der einzige Datensatz sein) aus der Tabelle Admin-Verwaltungseinstellungen abgerufen werden:<% Set objConn = Server.CreateObject ("ADODB.Connection") objConn.Open StrConn Set objRec2 = Server.CreateObject ("ADODB.Recordset") ConfigSql = "SELECT * FROM Admin;" objRec2.Open ConfigSql,objConn,0,1,&H0001 %>

Dann können Sie den Titel und die Haupt-Tags der HTML-Seite gestalten:

ASP auf dem Silbertablett Teil 15 – DIY Gästebuch

"farbe="<%=objRec2("PageFontColor")%>"Größe="<%=objRec2("PageFontSize")%>">

Gästebuch ansehen | Hinterlassen Sie einen Eintrag im Gästebuch

Und schließlich sieht die Hauptschleife für die Verarbeitung Ihrer Haupt- und einzigen ASP-Seite des Moduls so aus:

<% select case Request.QueryString("mode") case "post" Dim Field Dim dictFields Set dictFields = Server.CreateObject("Scripting.Dictionary") For Each Field in Request.Form If ValidateField(Request.Form(Field), Field) = False Then dictFields.Add LCase(Field), True End If Next If Request.Form.Count <>0 And dictFields.Count = 0 Then Call Update Else If Request.Form.Count<>0 Then End If ShowForm("Sign") End If case "show" Call Show case Else Call Show End Select %>

Es werden hier nur zwei Fälle (Fälle) betrachtet, die zwei Funktionen unserer Webanwendung entsprechen: Hinzufügen eines neuen Eintrags zum Gästebuch (Mode-Parameterwert = „post“) und Anzeigen von Gästebuchnachrichten (Mode-Parameterwert = „show“) .

<% objRec2.Close Set objRec2 = Nothing s objConn.Close Set objConn = Nothing Response.Write "

" %>

Fazit

Wir haben eine weitere funktionale Komponente der Website in Betracht gezogen und sie sofort portabel gemacht. Das Ergebnis war ein ziemlich komplexer Quellcode in Bezug auf die Wahrnehmung. Obwohl die große Anzahl von Parametern, die aus der Verwaltungstabelle abgerufen wurden, das Verständnis des Modul-Quellcodes etwas erschwerten, erspart Ihnen die einmalige Verwendung dieser Parameter das Bearbeiten des Codes, wenn Sie sie ändern. Das von uns entwickelte System ist in der Anwendung durchaus akzeptabel und kann dank der Modularität seiner Implementierung und des im Artikel beschriebenen Ansatzes für seine Implementierung in bestehenden Websites als Gästebuch auf Websites mit nahezu beliebiger Komplexität verwendet werden .

Natürlich sollte auch das Webinterface zum Bearbeiten, Hinzufügen und Löschen von Verwaltungseinstellungen (Schemas) berücksichtigt werden, aber das wird viel Zeit in Anspruch nehmen, und deshalb wird der Autor versuchen, es in einem der folgenden Teile dieses Artikels zu behandeln.

ComputerPress 11 "2001

Die Registrierung von Steuerelementen erfolgt durch die @Register-Direktive, die es Ihnen ermöglicht, Benutzersteuerelemente und Serversteuerelemente im HTML-Code der Seite mithilfe einer speziellen Syntax (deklarative benutzerdefinierte Serversteuerelementsyntax) zu verwenden. Basierend auf der Analyse dieser Direktiven kann der Seitenparser Tags bestimmten Typen zuordnen und beim Erstellen einer Seite Steuerelemente bereits als Container benutzerdefinierter Typen einbetten – Zweige des Steuerelementbaums der Seite.

Direktiven müssen der ersten Verwendung der deklarierten Tags vorangestellt werden, häufiger werden sie am Anfang der Seite platziert und im Falle der Registrierung mehrerer Steuerelemente kann die Anzahl solcher Deklarationen in Sites mit modularem Aufbau eine große Anzahl von Zeilen belegen . Wenn Sie die Position von Steuerelementen ändern, müssen Sie nach Zeilen suchen, die Änderungen im Code aller Seiten und Benutzersteuerelemente erfordern, auf denen sie registriert sind, was ziemlich unpraktisch ist.

Der Artikel beschreibt eine Methode, die die Registrierung von Steuerelementen vereinfacht.

Für die Registrierungsanweisungen verwenden wir eine einfache Textdatei, in der wir alle @ Register-Anweisungen sammeln. Da virtuelle Pfade verwendet werden können, um Benutzersteuerelemente zu deklarieren, und nur Namespaces für Serversteuerelemente angegeben werden, können wir alle benötigten Links in dieser Datei sammeln, und die Links zu den ascx-Dateien sind für jeden Ordner im Projekt korrekt. So sieht diese Datei in einem der Projekte aus:


<%@ Register TagPrefix="ch" Namespace="ControlsSharp.HtmlControls" Assembly="ControlsSharp"%>

<%@ Register TagPrefix="cw" Namespace="ControlsSharp.WebControls" Assembly="ControlsSharp"%>

<%@ Register TagPrefix="c" Namespace="ControlsSharp.CustomControls" Assembly="ControlsSharp"%>

<%@ Register TagPrefix="b" Namespace="ControlsBasic.CustomControls" Assembly="ControlsBasic"%>

<%@ Register TagPrefix="cu" TagName="bottommenu" Src="~/UserControls/Menu/cu_menu_bottom.ascx" %>

<%@ Register TagPrefix="cu" TagName="leftmenu" Src="~/UserControls/Menu/cu_menu_left.ascx" %>

<%@ Register TagPrefix="cu" TagName="topmenu" Src="~/UserControls/Menu/cu_menu_top.ascx" %>

Nennen wir die Datei register.inc und platzieren sie im Ordner /inc unseres Webprojekts.

Diese Datei enthält alle Links, die wir benötigen, wir werden die Registrierung eines Benutzers oder einer Serversteuerung darin hinzufügen oder ändern.

Nun muss die erstellte Datei irgendwie in den Seitencode eingebunden werden. Wir tun dies mit der SSI (Server Side Includes) #include Direktive. Mit dieser Direktive können Sie statische und dynamische Dateien in den Seitencode einschließen und sie basierend auf der IIS-Zuordnung verarbeiten, d. h. Wenn Sie eine asp- oder aspx-Datei als Quelle angeben, wird die Datei vom entsprechenden Prozess verarbeitet und die Ergebnisse dieser Verarbeitung werden auf die Ausgabeseite kopiert. In ASP war die Direktive #include sehr weit verbreitet und ermöglichte die Modularisierung der Site. Mit dem Aufkommen von ASP.NET ist es bequemer geworden, dies auf andere Weise zu tun, z. B. mithilfe von Benutzersteuerelementen. Zukünftige Versionen von ASP.NET werden Modularität mithilfe von Masterseiten implementieren. Im Allgemeinen verlor die #include-Direktive ihre Bedeutung und wurde hauptsächlich aus Gründen der Abwärtskompatibilität und zur Vereinfachung der Migration von ASP-Projekten nach .Net beibehalten.

Da wir eine einfache Textdatei haben, findet keine Verarbeitung statt, und bevor dynamischer Inhalt ausgeführt wird, wird der gesamte Inhalt der Datei in den Seitencode kopiert. Diese. Das Hinzufügen unserer Datei register.inc zum Beispiel oben auf der Seite ist fast dasselbe wie das Schreiben aller @Register-Direktiven dort.

Um nicht vom physischen Speicherort der Datei abhängig zu sein, verwenden wir wieder die virtuelle Pfadsyntax und fügen dem aspx-Dateicode die folgende Zeile hinzu:

Stellen Sie sicher, dass alles funktioniert, wenn nicht, korrigieren Sie die falschen Pfade.

Es bleibt noch eine weitere Operation durchzuführen. Wenn Sie jetzt versuchen, die Datei /inc/register.inc über den Link in Ihrem Browser abzurufen, können Sie dies ganz einfach tun. IIS legt es in Ihre Hände sowie in die Hände eines Angreifers, völlig kostenlos, obwohl es die Pfade der physischen Struktur Ihrer Site enthält.

Um dies zu verhindern, verwenden wir die Funktionen des synchronen HttpForbiddenHandler-Handlers, mit dem wir verhindern können, dass Dateien eines bestimmten Typs auf Anfrage des Benutzers ausgegeben werden. Dieser Ansatz ist praktisch und wird häufig verwendet, um beispielsweise MS Access-Datenbankdateien zu schützen, die in einem Projekt verwendet werden. Damit Dateien mit der Erweiterung *.inc mit diesem Handler geschützt werden, müssen Sie IIS mitteilen, dass diese Dateien vom ASP.NET-Prozess verarbeitet werden, dh IIS für die Zuordnung zu Dateien dieses Typs konfigurieren.

Eine ausführliche Beschreibung des Konfigurationsprozesses für IIS finden Sie unter HOW TO: Use ASP.NET to Protect File Types (http://support.microsoft.com/kb/815152/EN-US/). Wir müssen nur für *.inc-Dateien ein Mapping erstellen. Nach Abschluss der dort beschriebenen Schritte werden alle Anfragen nach Dateien mit dieser Erweiterung vom ASP.NET-Prozess verarbeitet, und Sie müssen die Datei web.config wie folgt bearbeiten:

Das ist es, wenn der Benutzer jetzt versucht, die Datei /inc/register.inc über einen direkten Link abzurufen, erhält der Benutzer Fehler B.

Um beispielsweise aspnet_isapi.dll nicht zu registrieren, Ihr Provider möchte dies nicht, können Sie die SSI-Fähigkeit verwenden, um Dateien beliebigen Typs anzugeben und zu schummeln, indem Sie eine Erweiterung eines der bereits standardmäßig in IIS abgebildeten Typen verwenden für eine Datei mit @Register-Direktiven. Die Erweiterungen *.cs oder *.vb sind dafür geeignet. Diese Dateien enthalten Quellcode und werden normalerweise nicht auf den Server kopiert. Wenn Sie plötzlich einen Fehler gemacht und sie kopiert haben, können Sie sie nicht auf Anfrage des Browsers abrufen - wenn Sie dies versuchen, erhält der Benutzer einen Fehler B. Dies geschieht, weil für Dateien dieses Typs Die Zuordnung in IIS ist standardmäßig konfiguriert und die entsprechende Erweiterung ist bereits im Abschnitt registriert machine.config-Datei. Damit der Compiler Ihnen keine Fehlermeldung ausgibt, fügen Sie in Visual Studio eine Erweiterung ein, die den Compiler nicht interessiert: in C#-Projekten ist es *.vb, in VB-Projekten ist es *.cs.
Fazit

Mit der beschriebenen Methode können Sie Steuerelemente für das gesamte Projekt an einer Stelle registrieren. Eine nachträgliche Änderung dieser Datei erfordert weniger Aufwand, als wenn Sie es auf die übliche Weise tun müssten. Versuchen Sie, SSI #include in den Dateien zu verwenden, die Sie einfügen. Dadurch können Sie eine Art Hierarchie und Vererbung organisieren, was für große Projekte praktisch sein kann

Direktiven in AngularJS spielen eine wichtige Rolle. Direktiven können verwendet werden, um HTML neue Tricks beizubringen, und Sie können sogar Ihre eigenen HTML-Tags oder -Attribute erstellen. Direktiven helfen auch dabei, das Markup flüssiger zu halten und definieren eine nette Möglichkeit, Code und Markup voneinander zu trennen.

View ist eine HTML-Vorlage. Ansicht ist nichts anderes als die Informationen, die Sie für den Browser des Endbenutzers rendern möchten. Eine Ansicht in AngularJS wird auch als bezeichnet kompiliertes DOM. View verwendet Direktiven, um die Daten mit einer HTML-Vorlage zu rendern.

Dieser Artikel ist Teil IV der Project Tracking Website, die in AngularJS und der ASP.NET-Web-API erstellt wurde. Bisher haben wir , erstellt und haben .

Dank an um diese Angular-Serie zu überprüfen und die Fehler zu beheben.

Wir haben bereits das Objekt $scope gesehen, das ein Modell für die Ansicht bereitstellt. Der Modellcode ist nicht mit dem HTML-Code vermischt, den wir in unsere Ansichten schreiben. Stattdessen werden Daten mithilfe von Datenbindungsausdrücken aus dem Modell in Ansichten verschoben. Auf diese Weise können Entwickler Separation of Concerns (SoC) erreichen. Da Modelle unabhängig von Ansichten sind, können sie an jede beliebige Ansicht gebunden werden. Diese Bindung des Modells erfolgt mit Hilfe von AngularJS-Direktiven.

Wir haben bereits einige Angular-Direktiven in unserer like ng-app gesehen, die AngularJS bootet, sowie ng-controller, der den Controller für HTML verfügbar macht. Vom Controller aus können wir die Daten mit Angular ((Ausdruck)) an die Ansichten binden.

In diesem Artikel werden wir uns ein paar zusätzliche AngularJS-Direktiven ansehen, die mit Angular sofort einsatzbereit sind. Einer von ihnen ist ng-Wiederholung. Lassen Sie uns versuchen, die Direktive ng-repeat in unserer Seite EmployeeDetails.html zu verwenden, die Sie im Begleittext zu diesem Artikel finden. Ändern Sie die Dienst-URL in unserer Datei EmployeesController.js. Die Dienst-URL lautet wie folgt:

http://localhost:2464/api/ptemployees

Jetzt ändern wir die Seite EmployeeDetails.html wie im folgenden Code gezeigt -

((ArbeitnehmerID)) ((Arbeitnehmername)) ((Betriebsbezeichnung)) ((emp.kontaktNr)) ((emp.eMailID)) ((emp.skillSets))

Ersetze das der Seite EmployeeDetails.html mit obigem Code. Die Ausgabe des obigen Codes wird hier gezeigt:

In diesem Code haben wir die ng-repeat-Direktive von AngularJS verwendet. Sie ähnelt der for- oder foreach-Schleife in .NET. Hier bekommen wir einen IEnumerable Sammlung mithilfe der ASP.NET-Web-API. Wir verwenden diese Sammlung als Modell in unserem Angular Controller. Mit diesem Modell iterieren wir die Objekte der Mitarbeiter in unsere Ansicht. Dies ist eine sehr hilfreiche Anweisung, die sich durch die Objekte in der Sammlung wiederholt, um die Daten in der Ansicht anzuzeigen.

Lassen Sie uns nun versuchen, einen Filter hinzuzufügen, um einen bestimmten Mitarbeiter aus der Sammlung zu suchen und den Mitarbeiter basierend auf dem angegebenen Mitarbeiternamen oder dem Zeichen des Mitarbeiternamens anzuzeigen. Bis jetzt haben wir das Modell abgerufen und in unseren Ansichten verwendet. Es funktioniert auch andersherum. Wir können unsere Ansichten dazu bringen, mit unseren Modellen zu sprechen, die in unseren Controllern vorhanden sind.

Um einen Suchfilter basierend auf dem Mitarbeiternamen hinzuzufügen, ändern wir die Seite „EmployeeDetails.html“, indem wir HTML-Eingabeelemente wie unten gezeigt hinzufügen:

Geben Sie den Namen oder das Zeichen des zu suchenden Mitarbeiters ein -

Fügen Sie den obigen Code direkt nach dem hinzu

Schild. Im obigen Code verwenden wir die ng-model-Direktive, mit der wir die Daten an das Modell zurücksenden können. Basierend auf diesen Daten suchen wir mithilfe der Eigenschaft EmployeeName nach einem Mitarbeiter. Stellen Sie sicher, dass die EmployeeName-Eigenschaft in unserem Modell deklariert ist, was wir in den folgenden Schritten tun werden. Beachten Sie auch, dass wir verwenden ng-einreichen Richtlinie, die einen Anruf geben wird SucheMitarbeiter Funktion von unserem Controller.

Ändern wir nun die Datei „EmployeesController.js“ so, dass wir den Mitarbeiter basierend auf der Eigenschaft „EmployeeName“ als Suchkriterium suchen können. Der Code ist unten gezeigt -

(Funktion () ( var EmployeesController = Funktion ($Scope, $http) ( var Employees = Funktion (ServiceResp) ( $Scope.Employees = ServiceResp.data; ); $Scope.SearchEmployees = Funktion (EmployeeName) ( $http.get ("http://localhost:2464/api/ptemployees/" + EmployeeName) .then(employees, errorDetails); ); var errorDetails = function (serviceResp) ( $scope.Error="Etwas ist schief gelaufen ??"; ) ;$http.get("http://localhost:2464/api/ptemployees") .then(employees,errorDetails); $scope.Title = "(!LANG:Employee Detail Page"; $scope.EmployeeName = null; }; app.controller("EmployeesController", EmployeesController); }()); !}

Im obigen Code haben wir unserem $scope-Objekt die SearchEmployee()-Methode als Modell hinzugefügt. Diese Methode sucht anhand des Mitarbeiternamens oder des Zeichens eines Mitarbeiternamens nach Mitarbeitern. Wir haben auch erklärt Mitarbeitername Eigenschaft in unserem Controller am Ende dieses Codes. Die SearchEmployees-Methode ruft die Web-API-Methode ab. Ich habe die GET-Methode wie hier gezeigt geändert:

Public HttpResponseMessage Get(String Name) ( var Mitarbeiter = EmployeesRepository.SearchEmployeesByName(Name); HttpResponseMessage Antwort = Request.CreateResponse(HttpStatusCode.OK, Mitarbeiter); Antwort zurückgeben; )

Der Mitarbeiter-Repository-Code ist wie hier gezeigt:

öffentliche statische Liste SearchEmployeesByName(string employeeName) ( ProjectTrackingDBEntities dataContext = new ProjectTrackingDBEntities(); var query = from employee in dataContext.Employees where employee.EmployeeName.Contains(employeeName) select employee; return query.ToList(); )

Führen Sie nach all diesen Änderungen nun die Seite EmployeeDetails.html aus und sehen Sie sich die Ausgabe an.

In der obigen Ausgabe suchen wir nach Mitarbeitern, deren Name das Zeichen „J“ enthält.

AngularJS-Filter Erweitern Sie das Verhalten von Bindungsausdrücken oder -direktiven. Filter werden mit Bindungsausdrücken verwendet, um die zu bindenden Daten zu formatieren. Wenn sie mit Direktiven verwendet werden, fügen sie den Direktiven einige zusätzliche Aktionen hinzu. Out-of-the-box bietet AngularJS eine Reihe von Filtern, mit denen wir die Werte eines Ausdrucks formatieren und die Werte/Daten in unseren Ansichten anzeigen können. Sie können Filter in Ansichten, Controllern und Diensten verwenden. Die Syntax zum Verwenden von Filtern in Ansichten lautet (( Ausdruck | filter1 | filter2 | ...)).

Wir werden nun einen Filter ausprobieren, der die Daten nach Mitarbeiternamen sortiert. Um die Daten zu sortieren, fügen wir einen Filter in unserem ng-repeat mit einem | hinzu Operator wie hier gezeigt:

Im obigen Code fügen wir einen Filter in unserer ng-repeat-Direktive hinzu. orderBy:'employeeName' sortiert die Daten anhand des Mitarbeiternamens in aufsteigender Reihenfolge. Sie können die Ausgabe hier beobachten:

Um die Daten in absteigender Reihenfolge anzuzeigen, können Sie den Filter wie hier gezeigt ändern:

Im obigen Code haben wir zum Sortieren der Mitarbeiternamen in absteigender Reihenfolge das Minuszeichen (-) verwendet. Ebenso können Sie das Zeichen (+) verwenden, um es aufsteigend zu sortieren.

Sie können auch Gebrauch machen beschränken auf Filter, um die Anzahl der Datensätze zu begrenzen. Nehmen wir zum Beispiel einmal an, Sie möchten 5 Mitarbeiter anzeigen. Um die eingeschränkte Anzahl von Datensätzen auf unserer Seite EmployeeDetails.html anzuzeigen, ändern wir die ng-repeat-Direktive wie hier gezeigt:

Die Ausgabe wird hier gezeigt:

Wenn Sie jetzt die Seite ProjectDetails.html ausführen, wird das Datum zusammen mit der Uhrzeit angezeigt. Sie können den Datumsfilter wie im folgenden Code gezeigt anwenden:

((Projekt.ProjektID)) ((Projekt.Projektname)) ((proj.startDate|date:"short")) ((proj.endDate|date:"short")) ((Projekt.ClientName))

Die Ausgabe dieser Seite sieht wie folgt aus:

Sie können verschiedene Datumsformate verwenden, z. B. Fulldate, Longdate, Mediumdate, Shortdate usw. Lassen Sie uns nun die Seite EmployeeDetails.html öffnen und ausführen. Ich verwende das Zeichen „Z“, um Mitarbeiter anzuzeigen, deren Mitarbeitername Z enthält.

Wenn Sie dies beobachten, zeigt die Ausgabe eine Tabellenüberschrift „Employee“ ohne Daten an. Wir können die Überschrift mit der Direktive ng-show unsichtbar machen, wenn der Filter kein Ergebnis liefert. Wenden Sie die ng-show-Direktive in unserem Tabellen-Tag an, wie im folgenden Code gezeigt, und versuchen Sie, die Anwendung mit dem Z-Zeichen auszuführen. Jetzt sehen Sie die Tabellenspalten nicht, wenn das Employees-Modell null ist. Das Attribut ng-show wertet das Employees-Modell aus und zeigt dementsprechend entweder die Tabelle an oder blendet die Tabelle aus.

Ebenso gibt es eine Reihe von Direktiven, die Sie in AngularJS verwenden können. Sie können auch eine benutzerdefinierte Richtlinie entwerfen, die wir später in dieser Serie sehen werden. Wenden Sie die Suche auf verschiedene Ansichten gemäß Ihren Anforderungen in unseren Ansichten an. In unserem nächsten Artikel werfen wir einen Blick darauf