Tags: | Categories: ASP.Net, IIS Posted by Christoph on 3/18/2011 1:26 PM | Comments (0)
Wenn man das URL Rewriting Modul im IIS 7.5 benutzen möchte, erkennt das Visual Studio leider diese Tags in der web.config nicht. Man kann aber einfach die entsprechenden Schemadefinitionen aktualisieren. Das passiert, indem man die UpdateSchemaCache.js und die rewrite.Xsd in einen Ordner legt, und in diesem in einer als Administrator gestarteten Shell einfach cscript UpdateSchemaCache.js ausführt. Dies habe ich bei Stackoverflow gefunden.
Tags: | Categories: Javascript, ASP.Net Posted by Christoph on 2/15/2011 6:00 PM | Comments (0)
Wenn innerhalb einer Updatepanels ein Fehler (Serverseitig) passiert, wird dieser nicht angezeigt. Man kann aber mittels dieses Javascriptes den Fehler als z.B. Javascript-Alert sichtbar machen: <script type="text/javascript"> /*== Show Errors from Updatepanel as Alerts==*/ Sys.Application.add_load(AppLoad); function AppLoad() { Sys.WebForms.PageRequestManager.getInstance().add_endRequest(EndRequest); } function EndRequest(sender, args) { if (args.get_error() != undefined) { var msg = args.get_error().message.replace("Sys.WebForms.PageRequestManagerServerErrorException: ", ""); alert(msg); args.set_errorHandled(true); } } </script>
Tags: | Categories: ASP.Net, AJAX, IIS, JQuery, Javascript Posted by Christoph on 12/10/2010 1:16 PM | Comments (0)
Wir haben in einigen Projekten die jQuery Datei(en) vom Microsoft CDN (ajax.microsoft.com) ausliefern lassen. Das hatte anfänglich ein großes Problem, da die Server die Dateien nicht über SSL ausliefern konnten, dies ist jedoch behoben, so dass wir folgenden Code benutzt haben: <script src="<%=IIf(Request.IsSecureConnection, "https", "http")%>://ajax.microsoft.com/ajax/jquery/jquery-X.X.X.min.js" type="text/javascript"></script> Nun musste ich aber heute feststellen, dass die Domain nicht mehr erreichbar ist. Die Files liegen jetzt ausschließlich unter ajax.aspnetcdn.com: <script src="<%=IIf(Request.IsSecureConnection, "https", "http")%>://ajax.aspnetcdn.com/ajax/jquery/jquery-1.4.4.min.js" type="text/javascript"></script> Der Umzug hat meiner Erachtens nur den Grund, dass die neuen Server die Files ausliefern, ohne Cookies zu setzet, und somit etwas schneller sind. Ob man nun das Problem, wie wir es hatten, dass die URL komplett weg ist, in Kauf nehmen möchte ist jedem selbst überlassen. Wir werden jedoch erstmal die Files lieber wieder auf unseren Servern hosten.
Tags: | Categories: ASP.Net, VB.Net Posted by Christoph on 5/17/2010 3:12 PM | Comments (0)
Wenn Sonderzeichen, die z.B. aus einem Silverlight-Control kommen, noch numerische HTML Entities haben, also sowas wie “&#252;”, kann man das mit folgender Funktion in echte ANSI Zeichen konvertieren: Public Shared Function CleanNumericEntities(ByVal InText As String) As String Return Regex.Replace(InText, "&#\d{3};", New MatchEvaluator(AddressOf ReplaceNumericHTML)) End Function Private Shared Function ReplaceNumericHTML(ByVal Ma As Match) As String Dim Val = Ma.Value.Substring(2, 3) If IsNumeric(Val) Then Return Chr(Val) Return "?" End Function
Categories: ASP.Net Posted by Christoph on 4/6/2010 10:39 AM | Comments (0)
Unter der Verwendung von CultureInfo kann man mit .Net ganz bequem Monats- oder Tagesnamen übersetzen: Thread.CurrentThread.CurrentUICulture = new CultureInfo("fr-FR"); foreach (String s in CultureInfo.CurrentUICulture.DateTimeFormat.MonthNames) Console.WriteLine(s); Ich habe diesen Code hier gefunden
Tags: , , | Categories: ASP.Net, VB.Net Posted by Christoph on 10/16/2009 3:28 PM | Comments (0)
Für die Benutzung von SEO freundlichen URLs (Search Engine Optimisation) benutze ich das URL Rewriting Modul des IIS (-> http://www.iis.net/extensions/URLRewrite). Wenn nun ein Datapager z.B. an ein Listview Control gebunden wird, benutzt dieser leider als Linkadresse nicht die “schöne” URL, sondern die aus dem Rewriting entstehende URL. Man kann dem Datapager aber mit dieser Funktion die neuen (schönen) Links beibringen: Private Sub FixPagerURLs(ByVal Pager As DataPager) For Each Pag As DataPagerFieldItem In Pager.Controls For Each Ctrl In Pag.Controls If TypeOf Ctrl Is HyperLink Then Dim Hyp As HyperLink = Ctrl Dim Req = Hyp.NavigateUrl.Replace(Request.Path, "").Replace("?", "") Dim Params = Req.Split("&") Dim NewPage = (From item In Params Where item.StartsWith("page")).FirstOrDefault Dim URL = Request.RawUrl If URL.Contains("?") Then URL = URL.Substring(0, URL.IndexOf("?")) If NewPage = "page=1" Then Hyp.NavigateUrl = URL Else Hyp.NavigateUrl = String.Concat(URL, "?", NewPage) End If End If Next Next End Sub und den dann im DataBound Event des Listview aufrufen: FixPagerURLs(dpProducts) Die Idee dazu habe ich von dieser Webseite: http://blog.anasghanem.com/post/Programmatically-Modifying-the-HyperLinks-in-the-DataPager-control.aspx
Tags: , , , | Categories: ASP.Net, Javascript, JQuery Posted by Christoph on 10/13/2009 7:07 PM | Comments (0)
Wenn man in einem datengebundenen Control (Repeater, Datagrid, ...) einen Radiobutton benutzt, der einen Gruppennamen hat, also innerhalb des Controls immer nur ein Button angewählt sein soll, bekommt man das Problem, dass asp.net dem RadioButton einen eindeutigen Namen gibt. Damit wird, wenn ich eine neue Radiobox anwähle, die alte nicht deselektiert. Mit diesem kleinen jQuery Script kann man die Funktion per Javascript wieder "nachbauen": <script language="javascript" type="text/javascript"> //<![CDATA[ jQuery(document).ready(function() { jQuery(":radio").change(function() { var sel = this.id; jQuery(":radio").each(function() { if (sel != this.id) { jQuery(this).removeAttr("checked"); } }); }); }); //]]> </script>
Tags: , , | Categories: ASP.Net, Silverlight Posted by Christoph on 7/23/2009 11:21 AM | Comments (0)
Wwnn Silverlight einen Webservice über SSL benutzen soll, müssen dazu folgende 3 Dinge beachtet werden: 1) eine clientaccesspolicy.xmlim Webroot haben: <?xml version="1.0" encoding="utf-8" ?> 2) eine crossdomain.xml im Webroot haben: <?xml version="1.0"?> 3) im Silverlight: ich benutze dazu meisst eine Statische Methode, die den Webservice erstellt, um die jeweilige URL vom System an die Umgebung anpassen zu können. Public Shared Function GetWebservice() As BackendService.BackendServiceSoapClient '--Detect Current URL Dim Url As String = String.Format("{0}BackendService.asmx", Settings.RootURLAll) Dim Binding As ServiceModel.BasicHttpBinding If Settings.RootURLAll.IndexOf("https") > -1 Then Binding = New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.Transport) With {.MaxReceivedMessageSize = 5000 * 1024} Else Binding = New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.None) With {.MaxReceivedMessageSize = 5000 * 1024} End If '--Create new Webservice Client Dim Binding As New ServiceModel.BasicHttpBinding(ServiceModel.BasicHttpSecurityMode.Transport) With {.MaxReceivedMessageSize = 5000 * 1024} Dim WS As New BackendService.BackendServiceSoapClient(Binding, New ServiceModel.EndpointAddress(Url)) Return WS End Function
Tags: | Categories: ASP.Net, VB.Net Posted by Christoph on 4/7/2009 1:14 PM | Comments (0)
Wenn man Daten über eine Webseite zu Excel exportieren will, geht das eigentlich ganz einfach, indem man eine HTML Seite ausgibt, die eine Tabelle enthält, und dann den Contentyp setzt. Dazu kann man noch den Tabellenzellen bestimmte CSS Attribute mitgeben, so dass die dann von Excel auch passent erkannt werden. Hier mal ein ganz grober Dummy, der aber das Vorgehen veranschaulicht: Response.Clear()Response.ClearHeaders()Response.ContentEncoding = Encoding.DefaultResponse.Buffer = TrueResponse.ContentType = "application/vnd.ms-excel"Response.AddHeader("Content-Disposition", "inline; filename=Statistik.xls")Dim Out As New StringBuilderOut.Append("<html>")Out.Append("<style>")Out.Append("body,th,td{font-size:10px;font-family:arial;color:black;}")Out.Append("table{mso-displayed-decimal-separator:""\,"";mso-displayed-thousand-separator:""\."";}")Out.Append("td{padding-top:1px;padding-right:1px;padding-left:1px;mso-ignore:padding;color:black;font-size:10.0pt;font-weight:400;font-style:normal;text-decoration:none;font-family:Calibri,sans-serif;mso-font-charset:0;mso-number-format:General;text-align:left;vertical-align:top;mso-background-source:auto;mso-pattern:auto;white-space:normal;}")Out.Append(".th{background:#d8d8d8;font-size:10px;font-family:arial;color:black;mso-pattern:black none;}")Out.Append(".date{mso-number-format:""Short Date"";}")Out.Append("</style>")Out.Append("<body>")Out.Append("<table>")Out.Append("<tr>")Out.Append("<td class='.date' align='left'>7.4.2009</th>")Out.Append("</tr>")Out.Append("</table>")Out.Append("</body>")Out.Append("</html>")Response.Write(Out.ToString)Response.End() Folgende Formatierungsmöglichkeiten hat man für mso-number-format: "0" NO Decimals "0\.000" 3 Decimals "\#\,\#\#0\.000" Comma with 3 dec "mm\/dd\/yy" Date7 "mmmm\ d\,\ yyyy" Date9 "m\/d\/yy\ h\:mm\ AM\/PM" D -T AMPM "Short Date" 01/03/1998 "Medium Date" 01-mar-98 "d\-mmm\-yyyy" 01-mar-1998 "Short Time" 5:16 "Medium Time" 5:16 am "Long Time" 5:16:21:00 "Percent" Percent - two decimals "0%" Percent - no decimals "0\.E+00" Scientific Notation "\@" Text "\#\ ???\/???" Fractions - up to 3 digits (312/943) "\0022£\0022\#\,\#\#0\.00" £12.76 "\#\,\#\#0\.00_ \;\[Red\]\-\#\,\#\#0\.00\ " 2 decimals, negative numbers in red and signed (1.56 -1.56)
Tags: , , | Categories: Administration, ASP.Net, Vista, Silverlight Posted by Christoph on 12/23/2008 1:04 PM | Comments (2)
Bei mir bringt der ASP.Net Development Server (der für die Entwicklung von Silverlight Anwendungen extrem praktisch ist) im Internet Explorer immer einen Fehler, dass die Seite nicht gefunden werden kann (URL: http://localhost:64720/Default.html). Die gleiche URL funktioniert jedoch im Firefox problemlos, und auch im IE funktioniert die URL, wenn man anstatt localhost die 127.0.0.1 benutzt. Das Problem liegt ein einem Eintrag in der hosts Datei, der für IPV6 gilt, jedoch hört der DevServer nicht auf IPV6. also: ab in die c:\Windows\System32\Drivers\etc\hosts und vor die "::1 localhost" eine "#". Damit ist das Problem behoben :-)  Tipp: am einfachsten gehht das Ändern der hosts, wenn man die in einen anderen Ordner kopiert, ändert, und wieder zurückkopiert. Dann hat man nur einen UAC Dialog.