ASP.NET
Hier ein SQL-Code, mit dem man alle Tabllen einer DB auflistet und die Anzahl der Felder, der Datensätze sowie die Größe der Daten auflisten kann:
CREATE
TABLE #temp (table_name sysname ,row_count INT,reserved_size VARCHAR(50),
data_size VARCHAR(50),index_size VARCHAR(50),unused_size VARCHAR(50))
SET NOCOUNT ON INSERT #temp
EXEC sp_msforeachtable 'sp_spaceused ''?'''
SELECT a.table_name,a.row_count,COUNT(*) AS col_count,a.data_size FROM #temp a INNER JOIN information_schema.columns b ON a.table_name collate database_default= b.table_name
collate database_default GROUP BY a.table_name, a.row_count, a.data_size
ORDER BY CAST(REPLACE(a.data_size, ' KB', '') AS integer) DESC DROP TABLE #temp
Manchmal ist es ganz praktisch eine Generic List im Repeater zu nutzen.
Mit <%# eval("Parameter")%> kommt man aber nicht weit.
Mit <%# Container.DataItem.Value1 %>aber schon:
Public Class ClassName
Public Value1 As String
Public Value2 As String
End Class
Dim Listname As New List(Of ClassName)
Dim Item1 As New ClassName
Item1.Value1 = "TestValue1"
Item1.Value2 = "TestValue2"
Listname.Add(Item1)
Repeater1.DataSource = Listname
Repeater1.DataBind()
<asp:Repeater ID="Repeater1" runat="server">
<ItemTemplate>
<%#Container.DataItem.Value1%>
</ItemTemplate>
</asp:Repeater>
Ein dummer Fehler beim Konfigurieren führte dazu, daass das debuggen mit IIS7 und VS2008 nicht mehr funktionierte.
Sicherlich gibt es noch andere Ursachen für den Fehler... grundsätzlich fehlt die Windowsauthentifizierung.
Bei mir half das Folgende:
Windows-Authentifizierung muß aktivert sein!
Der Launchtermin rückt näher... höcchte Zeit für Problemme auf dem Entwicklungsserver.
Der Speicher scheint einen Fehler zu haben und nötigt Windows 2008 Server zu unvermittelten Abstürzen.
Das zu ertragen ist zwar nicht schön, aber da es nur 1 Mal täglich ist, ist die Zeit für Nachforschungen nicht da.
Nach so einem Absturz heute, bekam ich untenstehende Fehlermeldung auf der Website.
Auch das vielfach empfohlene reparieren des .NET Framework und löschen der Dateien in C:\Windows\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files half leider nichts.
ABER: Das Anlegen einer neuen Website im IIS7 mit dem selben Verzeichnis, lies die Website wieder funktionieren.
Also vermutlich irgendwas von den Metadaten im IIS verloren gegangen....
Wenn man im SQL Management Studio eine SQLExpress Datenbank verwaltet, dann werden die Volltextfeatures und Dialoge nicht angezeigt. Dennoch sind sie aber vollständig vorhanden und nutzbar.
--- Erst einen Katalog erstellen
CREATE FULLTEXT CATALOG [TestKatalog] WITH ACCENT_SENSITIVITY = OFF
--- Die Tabelle dem erstellten Katalog zuordnen und den PrimaryKey
--- (hier [PK_CMS_Key]) angeben
FULLTEXT INDEX ON [dbo].[CMS_Tabellenname]
KEY INDEX [PK_CMS_Key] ON ([TestKatalog]) WITH (CHANGE_TRACKING AUTO)
Go
--- die Spalten hinzufgen, die im Index enthalten sein sollen
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname] ADD ([Body],[Headline] LANGUAGE [German])
Go
--- und das Ganze aktivieren
ALTER FULLTEXT INDEX ON [dbo].[CMS_Tabellenname] ENABLE
--- Warten bis der Index erstellt ist (der Taskmanager geht
--- dabei...
In einem ASP.NET CMS habe ich eine Möglichkeit gesucht in einem FCKEditor diverse Platzhalter in Artikel-Tex einzusetzen, die später dann durch aktuelle Inhalte und Werbung ersetzt werden könne.
Am schönsten wäre es natürlich, wenn es auch im Editor bereits angezeigt wird um zu sehen, wie der Text um den potentiellen Inhalt läuft.
Die API des FCKEditors möchte ich nicht anfassen also muß iich mit vorhandenen Mitteln zu Rande kommen.
Trick 1.
Um die Größe und Position im Content zu definieren, nehme ich ein image in vergleichbarer Größe (wie das Bild rechts).
Trick 2.
Ich definiere mir Styles für den FCKEditor und generiere diese mit einem...
Eigentlich hatte Martin Hey genau im richtigen Moment seinen Post zum Thema veröffentlicht.
Aber dann fiel mir ein, dass wenn es einen Vorteil von VB.NET gegenüber c# gibt, dann ja wohl im XML-Bereich.
Ein Imports am Kopf der Seite reicht um den Namespace Global einzufügen.
Das Ganze gepaart mit einem InsertAllOnSubmit habe ich in ein paar wenigen Zeilen alle Categories aus meinem XML-Dokument in die Datenbank importiert.
1 Imports <xmlns="http://www.ticketonline.de/ticketonlineevents/1.0">
2 Imports <xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
3
4 Partial Class LoadTicketOnline
5 Inherits System.Web.UI.Page
6
7 Protected Sub Page_Load(ByVal sender As Object, _
8 ByVal e As System.EventArgs) Handles Me.Load
9
10 Dim...
"Eine Person muss in der Lage sein Informationen zu finden, von denen sie nicht wußte, dass sie sie gesucht hat."
Schrieb Tim Berners-Lee im März 1989 in einem Antrag am europäischen Kernforschungszetrum CERN, in dem er eine Software schreiben wollte, die es den Wissenschaftlern einfacher macht Informationen auszutauschen.
Sein Chef kommentierte diesen Antrag mit: "Vague but exiting".
Er verwirklichte dieses Projekt und entwickelte dazu den ersten Browser WorldWideWeb und den ersten Webserver unter dem Betriebssystem NeXTStep. Dies sollte den Ursprung des World Wide Webs darstellen.
Zusammengefasst mit den ersten Gehversuchen des ARPA-Net in einem 30-minütigem "neues spezial"
In seinem Artikel Building a Single Sign On Provider Using ASP.NET and WCF zeigt Mark J. Miller in 4 Teilen, wie man mit Hilfe von JASONP ein Single Sign on implementieren kann.
OOYES.NET hat 14 Javasceript -Resources zusammengefasst, mit den man Charts in Javascript generieren kann.
Von umsonst bis kostenpflichtig. Ein kurzer Blick lohnt auf jeden Fall
OOES.NET beschreibt diese noch kurz mit kleinen Screenshots:
http://ooyes.net/resources/14-javascript-resources-and-plugins-for-creating-a-stylish-chart
Die folgenden Links sind nur zu meiner Dokumentation:
Creating accessible charts using canvas and jQuery
Emprise JavaScript Charts
Flot
...
Für eine Image-Gallery in in einem Community-Projekt, habe ich mir eine Lösung mit jQuery erstellt, um Bilder online zu bearbeiten.
Also hauptsächlich Resize und Cropping.
Dabei enstand als kleines Nebenprodukt eine Lösung, bei der man einen Deepzoom auf große Bitmaps machen kann.
Eine einfache Version davon habe ich hier mal online gestellt:
DeepZoom mit jQuery
Download als ASP.NET - Website
Das verwendete Bild auf dem Server ist 7MB groß und...
Ich mache das ja schon lange.... und ich habe auch schon einiges mit Bildern zu tun gehabt.
Aber jedes mal wieder fummele ich mir aus alten Codes oder dem Internet die Funktionen für Größenveränderungen heraus.
Meist sind diese (vor allem bei gegoogelten Beispielen) gespickt mit Spezialfunktionalität.
Diesemal habe ich mir die Mühe gemacht - ein für alle Mal - drei Funktionen zu generieren, die sowohl Cropping, Resizing oder aber beides gleichzeitig in bestmöglicher Qualität zu liefern.
Und da ich meißt nur ein Stream oder Byte() benötige, bekomme ich as Rückgabewert auch ein MemoryStream.
Diesen kann ich in die Datenbank schieben oder per BinaryWrite direkt ausgeben.
1 Imports...
Beim Entwickeln einer Webplattform macht man ja gerne den einen oderanderen HTML Fehler.
Auch wenn mir das immer seltener passiert, ist es dennoch schön wenn man gleich Probleme mittels Holzhammermethode mitgeteilt bekommt.
Bekanntlich kann man in Page Render den HTML-Code abgreifen.
Wenn man daraus ein XElement generieren kann, ist der Code zumindest schon mal valiedes XML.
Wenn dies nicht funktioniert lasse ich mir die Fehlemeldung ausgeben und kann de Fhler gleich korrigieren.
Kleiner Nebeneffekt:
Der HTML-Code ist absolut perfekt eingerückt und die Struktur klar ersichtlich, auch wenn man viele Usercontrols zusammensteckt.
Ob man dies in einer Live-Website einsetzt ist sicherlich fraglich.
1
2 Partial Class _Default
3 Inherits System.Web.UI.Page
4
5
6
7 Protected Overrides...
Wer heutzutage Webentwicklung macht , kommt um Ajax und größeren Javascript-Steuerungen beim Client nicht mehr herum.
Da gibt es vieles umsonst, wie das MS-Ajax und Ajax-Toolkit , jQuery, devexpress usw. aber auch teure umfangreiche Lösungen wie die von Componentart, Telerik usw.
Im Grundsatz haben alle ihre Vor- und Nachteile.
Was alle gemeinsam haben, ist das man bei keiner dieser Lösungen einfach starten kann bevor man nicht die 2-Tage Fummelarbeit hinter sich gebracht hat.
Aber schließlich bekommt man ja auch umfangreiche Libraries die meißt auch plattform- und browserübergreifend Funktionalitäten bieten.
Aber mit was startet man nun?
Die Tendenz in den letzten Jahren geht klar zu jQuery. Was bei...
In meinen Webprojeten benutze ich natürlich auch immer wieder Session-Variablen, die dann wiederum an anderer Stelle abgerufen werden.
Abgesehen von möglichen Schreibfehlern, bin ich auch imer wieder auf der Suche nach der richtigen Bezeichnung.
Die wichtigsten lagere ich jetzt in eine kleine Klasse aus:
1 Public Class Properties
2 Public Enum VariableName
3 UserID = 1
4 UserName = 2
5 'usw.
6 End Enum
7
8 Public Shared Property Session(ByVal name As VariableName) As Object
9 Get
10 Return HttpContext.Current.Session _
11 ("adjustment.properties.session." & name.ToString)
12 End Get
13 Set(ByVal value As Object)
14 HttpContext.Current.Session _
15 ("adjustment.properties.session." &...
Beim Stöbern auf CodePlex bin ich über das opensource Projekt "DotNetAge jQuery" gestoßen und bin mehr als angetan.
DotNetAge ermöglicht es jQuery Features in Webcontrols zu nutzen (beispielsweise kann jedes Control mit Resize versehen werden) und bietet aber auch eine ganze Reihe von Webcontrols die Features wie Accordion, Dragpanels usw. direkt bieten.
Für jQuery-Plugins gibt es ebenfalls eine Möglichkeit, diese einzubinden.
Sehr gut gelöst und auch nach Stunden des herrumspielens bin ich immernoch angetan von der Lösung.
Schöner Mix zwischen voller Funktionalität von jQuery und der Einfachkeit für tägliche Standardanwendungen.
[Die Bilder sind von der Website DotNetAge]
In einem Datenexport aus Zope fand ich diverse Escape-Zeichen für alle Sonderzeichen.
Offensichtlich HEX-Codiert mt einem \x vorab. Also für ö ein \xf6 usw.
Die Suche nach Listen für ein globales Replace gab ich recht schnell auf und generierte meine eigene Liste:
...
In SQL Server 2000 darf eine Rownicht mehr als 8000 Bytes groß sein.
Das bedeutete auch, dass ein Feld max. 8KB gross sein darf, sofern es das einzige Feld ist, dass abgefragt wurde.
Eine varchar Spalte darf max 8KB und eine nVarcharSpalte max 4KB groß sein(2 Byte pro Unicode-Zeichen) sein.
Um mehr Daten in einer einzigen Spalte zu speichern gibt bzw. gab es NTEXT, oder Bild-Daten-Typen (BLOBs).
Nachteil, dass deiese Felder nicht wie üblich in Abfragen verwendet werden können.
Um dieses Problem zu lösen, wurden VARCHAR (MAX), NVarChar (MAX), und VARBINARY (MAX) Datentypen in SQL Server 2005 eingeführt.
Diese Daten können über die gleiche Menge von Daten...
Immer mehr Webanwendungen verwenden Ajax-Toolkits um bestimmte Funktionalitäten auf den Seits zur Verfügung zu stellen.
Abgesehen von der Suchmaschienenproblematik vergessen irgendwie alle, wofür es ursprünglich da war.
Es geht darum, dem User das Interface zu vereinfachen und oft auch Vorgänge dadurch zu beschleunigen, dass kein Reload der Seite gemacht werden muss.
Um das gleich mal klar zu stellen, ich setze das selbst gerne ein und auch immer öfter.
Was ich langsam nicht verstehe, ist das die Entwickler der Toolkits Pakete schnüren, bei denen mehrere hundert KB Javascript geladen werden müssen um einfache Effekte zu erzielen, die ein paar Zeilen eigenes Javascript auch realisieren...
Wenn man eine ASP.NET Textbox im Textmode="Multiline" erstellt, funktioniert dummerweise Maxlength nicht, da die HTML-Textarea das nicht unterstützt.
Hier ist die passende Javascript-Function und der VB-Code dazu.
Um das Feature später einfac h ändern zu können, suche ich erst alle Textboxen innerhalb eines Panels und aktiviere entsprechende onChange und onKeyDown Events.
1 Sub setMaxlength()
2 For Each ctl As Control In Panel1.Controls
3 If ctl.GetType Is GetType(TextBox) Then
4 Dim myTextbox As TextBox = ctl
5 If myTextbox.TextMode = TextBoxMode.MultiLine _
6 AndAlso myTextbox.MaxLength > 0 Then
7
8 myTextbox.Attributes.Add("onChange", _
9 ...
Jeder kennt das Problem... Man hat einen formatierten String und möchte diesen im Code verwenden.
zwei Möglichkeiten.... entweder man stückelt Ihn über mehrere Zeilen zusammen oder man macht eine gaaaaanz lange Zeile daraus.
Beides ist unbefriedigend und mühsam.
Gestern habe ich nun das XElement dafür entdeckt :
1 Dim SQL As New XElement(<root>
2
3 SELECT CMS_Artikel.Dachzeile,
4 CMS_Artikel.DateFrom,
5 CMS_Artikel.CreateDate,
6 User_User.RealName,
7 CMS_Artikel.ArtikelID
8 FROM CMS_Artikel...
Und mal wieder habe ich Probleme auf einem Server Umlaute in Cookies zu speichern bzw. zu lesen.
Die Tipps sind vielfältig und variiren von Server.URLDecode bis hin zu Globalization Eiträgen in der Web.Config.
Diesmla half gar nichts... Deswegen werden die CookieInformationen ab sofort Base64-codiert.
Damit hat sich das Thema - hoffentlich
String to Base64
1 Dim base64String As String = _
Convert.ToBase64String(System.Text.Encoding.UTF8.GetBytes("äüö$$"))
2
3 Dim c As New HttpCookie("testCookie")
4 c("value") = base64String
5 Response.Cookies.Add(c)
6
7
Base64 to String
9 Dim base64FromCookie As String = _
Request.Cookies("testCookie").Values("value")
10
11 Dim standardString As String = _
Text.Encoding.UTF8.GetString(Convert.FromBase64String(base64FromCookie))
12
13 Response.Write(standardString)
Wer bereits mit XML gearbeitet hat und XPath-erfahren ist möchte dies evtl. auch mit xLinq nutzen.
Hierzu benötigt man den Namespace System.XML.XPath der dann diverse Extension-Methods bereitstellt:
3 Imports System.Xml.XPath
[...]
147 Dim list As IEnumerable(Of XElement) _
= xdoc.XPathSelectElements("//Node1/Node2/Node3[Attribut1='Value1']")
In einem Bestellsystem für Stromverträge kann ein User aus einer Ergebnisliste eine Bestellung auslösen.
Die Linq-Abfrage hierzu ist mehr als komplex und die Werte in den verbundenen Tabellen werden in verschachtelten Repeatern auf der Website dargestellt.
Da wöchentlich die Datenbank ausgetauscht wird, möchte ich gerne im System die Daten aus dem Ergebnis hinterlegen.
Dummerweise ist ein LinqToSQL-Ergebnis nicht serialisierbar.
Im Netz habe ich auch nichts gefunden und mir meine eigene rekursive Methode gebastelt:
Sicherlich noch verbesserungsfähig... aber für das aktuelle Problem austreichend.
01 Imports System.Reflection
11
12 Public Function getXElementFromLinqObject(ByRef RootElement As XElement, _
13 ByVal DataObject As Object) As...
Fast jedes Mal, wenn ich ein neues Webform erstelle, füge ich ein Page_Load-Handler ein.
Im Verzeichnis
C:\Program Files (x86)\Microsoft Visual Studio 9.0\Common7\IDE\ItemTemplatesCache\Web\VisualBasic\1033
liegen die Vorlagen für dei neuen Objekte.
Einfach in die Codebeside Datei den nötigen Eintrag machen und ab sofort ist der Handler vorhanden.
Um Wildcardmapping im IIS7 zu ermöglichen, muss ein Sperre aufgehoben werden.
Folgenden Befehl in einer Console ausführen und die Sache ist erledigt:
C:\Windows\System32\inetsrv\appcmd.exe unlock config /section:system.webserver/handlers
Und dann muß noch die <modules> Section angepasst werden bzw. ein Attribut hinzugefügt werden:
<modules runAllManagedModulesForAllRequests="true" >
Ich habe eine Anwendung, die die entsprechende Contentdatenbanken jeweils per Hostname auswählt.
Da ich prinzipiell den SqlMembershipProvider nutze, möchte ich wenn möglich, den Applicationname des Mebershipproviders entsprechend anpassen.
Hier ist der entsprechende Providder dazu:
Imports System
Imports System.Web
Imports System.Data
Imports System.Configuration
Imports System.Collections
Imports System.Web.Security
Imports System.Collections.Specialized
Imports System.Data.SqlClient
Class myMembershipProvider
Inherits System.Web.Security.SqlMembershipProvider
Public Overrides Property ApplicationName() As String
Get
Return HttpContext.Current.Request.Url.Host
End Get
Set(ByVal value As String)
MyBase.ApplicationName = HttpContext.Current.Request.Url.Host
End Set
End Property
End Class
Wenn man mit seiner .NET Website bei einem Hoster ist, wird in der Regel nach 20 bis 60 Minuten die Website "heruntzergefahren", was leider beim Neustart je nach Umfang des Projektes zu längeren Wartezeiten führt.
Eine Lösung wäre, die Website von einem anederen Server aus anzupingen um regelmäßige Requests durchzuführen.
Aber wenn man mit seinem Web beim Hoster ist, hat man normalerweise diese Möglichkeiten nicht zur Verfügung.
Die Lösung:
Ein Timer in der global.asax fragt regelmäßig die eigene Website ab.
Funktioniert zwar nicht direkt nach einem Reboot des Servers oder restart des IIS aber wenn dann eine Abfrage genmacht wurde, hätlt es immerhin bis...
Wer eine Mobile-Anwendung erstellt und eine relativ geringe Seitenbreiite wählt, wird feststellen, dass z.B. das IPhone diese nur winzig klein darstellt.
Abhilfe schaft ein Metatag:
<meta name="viewport" content="user-scalable=no, width=device-width">
Wobei auch eine feste Breite angegeben werden kann:
<meta name="viewport" content="user-scalable=no, width=220">
Danke an Alex, für den Hinweise auf den Artikel bei Heise Developer!
Mit der folgenden Funktion kann man ermitteln, welches Control einen Postback ausgelöst hat.
Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
Response.Write(getPostBackControl.ID)
End Sub
Private Function getPostBackControl() As Control
Dim ctlM As Control = Nothing
Dim ctl_Name As String = Page.Request.Params("__EVENTTARGET")
If ctl_Name IsNot Nothing AndAlso ctl_Name <> "" Then
ctlM = Page.FindControl(ctl_Name)
Else
Dim cx As Control = Nothing
Dim ctrlStr As String = ""
For Each ctl As String In Page.Request.Form
If ctl.EndsWith(".x") OrElse ctl.EndsWith(".y") Then
ctrlStr = ctl.Substring(0, ctl.Length - 2)
cx = Page.FindControl(ctrlStr)
Else
cx = Page.FindControl(ctl)
End If
If TypeOf cx Is System.Web.UI.WebControls.Button _
...
Wer sich sich die beiden Frameworks genauer anschaut stellt sich recht schnell die Frage, wieso braucht man beides...
Auf der Technical Summit in Berlin mit einem gleichnamigen Vortrag bekam ich die Antwort dazu:
Die beiden Entwicklerteams haben nichts von einander gewußt und es wurde doppelt entwickelt. (siehe auch)
Im Detail wurden zwar auch die Vor- und Nachteile der einzelnen Umsetzungen im Detail erklärt, um abschließend kund zu tun, dass Linq-To-Sql zwar weiter "weiter unterstützt" wird, aber das Team bereits nicht mehr existiert.
Eine weitere Entwicklung findet sozusagen nicht mehr statt.
Das Entity Framework dagegen hat zwar im Moment noch nicht ganz so viele Features, was sich allerdings...
Um in einer ASP.NET Website Linq verwenden zu können müssen neben der Umstellung auf .NET 3.5 auch noch folgende Eiträge in der Web.Config gemacht werden:
<system.web>
<compilation debug="true">
<assemblies>
<add assembly="System.Xml.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
<add assembly="System.Data.Linq, Version=3.5.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
</assemblies>
</compilation>
<pages>
<namespaces>
<add namespace="System.Linq" />
<add namespace="System.Data.Linq" />
<add namespace="System.Xml.Linq" />
</namespaces>
</pages>
</system.web>
Immer wieder die große Frage, was diese Fehlermeldung bedeutet.
Nach wie vor habe ich dafür keine Erklärung und auch bisher keine negativen Auswirkungen gemerkt.
Nichtsdestotrotz füllt es immer wieder die Fehlerliste in ASP.NET Projekten.
Ein Workaround hierfür ist folgendes Modul im App_Code-Verzeichnis:
Public Module myModule
Public __o As Object
End Module
;-) Das ich da nicht früher drauf gekommen bin.
Im DSL-Zeitalter scheint es nicht mehr so wichtig zu sein ob die Seite nun 50KB oder 100KB HTML-code hat.
Aber auch mit DSL ist ein Unterschied von 30KB deutlich zu spüren.
Mit ASP.NET verwendet man in der Regel viele Controls. Das führt meißt dazu, dass viele leere Zeilen und unötige leerzeichen den Code vergrößern.
Mit folgendem Code können diese entfernt werden:
Protected Overrides Sub Render(ByVal output As HtmlTextWriter)
Dim sb As StringBuilder = New StringBuilder
Dim sw As StringWriter = New StringWriter(sb)
Dim htw As HtmlTextWriter = New HtmlTextWriter(sw)
MyBase.Render(htw)
Dim PageHTML As String = sb.ToString()
PageHTML = PageHTML.Replace(vbTab, " ")
While PageHTML.Contains(" ")
...
Imports <xmlns:co="http://schemas.microsoft.com/.NetConfiguration/v2.0">
Class editWebConfig
Public shared Sub updateWebConfig()
Dim PathToWebConfig As String = "d:\www\inetPub\web.config"
Dim webConfig As XDocument = XDocument.Load(PathToWebConfig)
Dim xNode = From p1 In webConfig.<co:configuration>.<co:connectionStrings>.<co:add> _
Where p1.@name = "connectionString_Name_In_Web_Config" _
Select p1
xNode.@connectionString = "Data Source=.\SQLExpress;Initial Catalog=myDatabase;Integrated Security=True"
webConfig.Save(PathToWebConfig)
End Sub
End Class
Jeder kennt es, ab und zu muß man dann doch HTML-Code im ´Hintergrund (z.B. für einen Email-Body) generieren und sückelt sich zu unübersichtlich zu Tode.
Mit dem XElement ist das kein Problem.
Man schreibt den HTML-Code wie im Markup-Editor und kann sogar Variablen wie im markup einbinden:
<%=meineVariable%>
Kein hantieren mit Anführungszeichen usw..
Im Zeitalter der Spamflut, geben auch die User Ihre Emailadresse nicht mehr an, wenn sie danach gefragt werden.
Mit der unten aufgelisteten Class EmailCheck kann man genau das prüfen.
Im Prinzip, ermittelt die Klasse den MX-Record der UserDomain und macht ein Helo am Mailserver und teilt dem Mailserver mit, dass wir eine Email für eine bestimmte Emailadresse haben. Existiert die Adresse nicht oder ist die Mailbox voll usw., so lehnt der Mailserver an dieser Stelle die Annahme ab und wir wissen, dass mit der Adresse etwas faul ist.
Lehnt der Mailserver an dieser Stelle die Annahme NICHT ab, so ist die Adresse...
Mit Hilfe von System Reflection kann man Enumwerte auslesen und entsprechend weiter verarbeiten.
using System.Reflection;
private enum Fruits
{
Orange = 1,
Apple = 2,
Pear=3
}
static void Main()
{
Type dataType = Enum.GetUnderlyingType(typeof(Fruits));
foreach (FieldInfo field in typeof(Fruits).GetFields(
BindingFlags.Static | BindingFlags.GetField | BindingFlags.Public))
{
object value = field.GetValue(null);
Console.WriteLine("{0}={1}", field.Name, Convert.ChangeType(value, dataType));
} Console.ReadLine();
}
EDIT:
Oder eben einfach mit
Enum.GetValues(Fruits);
Enum.GetNames(Fruits);
(Danke Dani für den Kommentar!)
im IIS-Downloadcenter hat Microsoft eine Preview des Web Deployment Tools veröffentlicht.
Die Featureliste klingt sehr vielversprechend:
Syncronisation zweier Webserver (IIS6 und IIS7)
Migration von IIS6 auf IIS7
Analyse der installierten Features auf IIS6
Troubleshooting und Validierungsfeatures (für Syncronisation und Migration)
Weiteres im IIS-Downloadcenter und im IIS-Forum.
In Scott Guthrie's Blog habe ich in den Jan 4th Links einenen Hinweis auf ein Script#-Update gefunden.
Aber was ist Script#?
Der Script#-Compiler von Nikhil Kothari erlaubt es Code in C# zu entwickeln und Javascript als Ergebmis zu erhalten.
Sicher interessant für jeden der firm in C# ist und mehr und mehr eigene Ajax-Funktionalitäten benötigt.
Ein weiterer Vorteil ist sicherlich das C# Intellisense von VisualStudio
Beispiel:
using System;
using ScriptFX;
using ScriptFX.UI;
namespace HelloWorld {
public class HelloWorldScriptlet : IScriptlet {
private Button _okButton;
private TextBox _nameTextBox;
private Label _helloLabel;
private XMLHttpRequest _request;
public void Start() {
_okButton = new Button(Document.GetElementById("okButton"));
_nameTextBox = new TextBox(Document.GetElementById("nameTextBox"));
_helloLabel = new Label(Document.GetElementById("helloLabel"));
_okButton.Click...
Bei glengamoi.com komen eigentlich immer wieder Fragen zu den Basics in ASP.NET.
Da auch ich mal angefangen habe, will ich hier mal ein paar Links für Beginner zusammenfassen.
Bestes Forum:
glengamoi.com :-)
Für Anfänger aber auch für Fortgeschrittene sind die Webcasts und HowTo-Videos von Microsoft sehr empfehlenswert und haben bei mir auch nach Jahren .NET-Programmierung noch das eine oder andere AHA hervorgelockt.
ASP.NET / Learn (englisch)
Webcasts von Microsoft in deutsch
Webcasts und Events von Microsoft und Suche nach Webcasts
Silverlight und WPF (sehr...
Immer wieder ein beliebtes Try and Error-Spiel ist das generieren von CSS.
Kleine Starthilfe sind die CSS-Links, die ich bei Daniel Walzenbach gefunden habe.
CSS-Layout-Generators:
CSS Layout Generator
Layout-o-matic
http://builder.yaml.de/ (danke an Alex für den Tipp)
diverse CSS Links und Tutorials im Infopirat-Blog
CSS Tutorials
css Zen Garden: The Beauty in CSS Design
CSS Layout Techniques: for Fun and Profit
Mit folgendem Code kann man den in den Appsettings eingetragenen ConnectionString zur Laufzeit zu ändern:
My.MySettings.Default.Item (connectionName) = connectionString
Wenn der Connectionstring in der App.config gespeichert werden soll, hilft folgende Funktion:
Sub saveConnectionString(ByVal connectionName As String, _
ByVal connectionString As String)
Dim Config As Configuration
Dim Section As ConnectionStringsSection
Dim Setting As ConnectionStringSettings
Dim ConnectionFullName As String
ConnectionFullName = String.Format("{0}.My.MySettings.{1}", _
System.Reflection.Assembly.GetExecutingAssembly.GetName.Name, _
connectionName)
Config = ConfigurationManager.OpenExeConfiguration(ConfigurationUserLevel.None)
Section = CType(Config.GetSection("connectionStrings"), ConnectionStringsSection)
Setting = Section.ConnectionStrings(ConnectionFullName)
If IsNothing(Setting) Then Throw New Exception("Connection mit dem Namen " & _
connectionName & " nicht gefunden.")
Setting.ConnectionString = connectionString
Config.Save(ConfigurationSaveMode.Full)
'Hier wird der Connectionstring für die aktuelle Laufzeit geändert
My.MySettings.Default.Item(connectionName) = connectionString
End Sub
Gestern wurde die erste CTP der ASP.NET 3.5 Extensions released. Genaueres über den Inhalt gibt es in der .NET Web Product Roadmap (ASP.NET, Silverlight, IIS7) in ScottGu' Blog.
Ebenfalls gibt es unter http://quickstarts.asp.net/3-5-extensions/ Demos und Quickstart Samples.
Hier ist noch eine Liste von Tutorials und Screencasts von ScottGu, Scott Hanselman und Phil Haack.
ASP.NET MVC Framework (Part 0): What is it?
ASP.NET MVC Framework (Part 1): Building an MVC Application
ASP.NET MVC Framework (Part 2): URL Routing
ASP.NET MVC Framework (Part 3): Passing ViewData from Controllers...
Microsoft hat auch zwei Bücher zum kostenlosen download: Microsoft Visual Basic 2005 - Das Entwicklerbuch
Wobei man sich den zweiten Teil auch herunterladen kann, wenn man in der Download-URL Teil_1 durch Teil_2 ersetzt :-)
Alle Jahre wieder bin ich auf der Suche nach einem Tool oder Code, mit dem ich Verzeichnisstrukturen auslese.
mit diesem Minitool kann ich die Verzeichnisstruktur auslesen und in eine XML-Datei schreiben.
Und hier ist der Code dazu