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 “ü”, 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 (3)

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.

Tags: , , | Categories: ASP.Net, JQuery, Tools, VB.Net Posted by Christoph on 10/29/2008 2:25 PM | Comments (0)

Microsoft hat ein neues Intellisense File für JQuery herausgebracht, mit dem nun im VS2008 alle Parameter vom JQuery angezeigt werden:

http://blogs.msdn.com/webdevtools/default.aspx

Tags: , , , | Categories: ASP.Net, Javascript, JQuery Posted by Christoph on 10/1/2008 1:51 PM | Comments (0)

Mit dem .Net 3.5 SP1 ist eine neue sehr nützliche Funktion zum asp:ScriptManager hinzugekommen: Man kann nun automstisch die benötigten Javascript Dateien zusammenfügen lassen  (incl. die für das Ajax Control Toolkit benötigten!)

Dazu müssen folgende Schritte durchgeführt werden:

  1. mit dem Script Reference Profiler auflisten, welche Dateien überhaupr benötigt werden:
    • den Profiler von Codeplex herunterladen
    • die DLL im Projekt als Referenz anlegen
    • in der index.aspx ganz oben folgende Referenz einfügen:
      <%@ Register Assembly="ScriptReferenceProfiler" Namespace="ScriptReferenceProfiler" TagPrefix="asp" 
      %>
    • auf der Seite dann den Profiler anzeigen:
      <asp:ScriptReferenceProfiler runat="server" />
  2. Nun können die benötigten Dateien zum asp:ScriptManager hinzugefügt werden:
    <asp:ScriptManager ID="sm1" runat="server"
        EnableScriptGlobalization="false"
        EnableScriptLocalization="false"
        LoadScriptsBeforeUI="false"
        ScriptMode="Release" >
        <CompositeScript ScriptMode="Release">
            <Scripts>
                <asp:ScriptReference name="MicrosoftAjax.js"/>
                <asp:ScriptReference name="MicrosoftAjaxWebForms.js"/>
                <asp:ScriptReference Path="~/Include/js/jquery-1.2.6.min.js"  />
                <asp:ScriptReference Path="~/Include/js/thickbox.31.de.js" />
                <asp:ScriptReference Path="~/Include/js/jquery.tooltip.js" />
                <asp:ScriptReference Path="~/Include/js/my.js" />
            </Scripts>
        </CompositeScript>
    </asp:ScriptManager>

Damit werden alle benötigten Dateien "am Stück" geladen.

Tags: , , , | Categories: ASP.Net, VB.Net Posted by Christoph on 10/1/2008 12:23 PM | Comments (0)

Der IIS 7 hat nun endlich ein schönes Rewrite Modul bekommen.

Nun ergibt sich aber das Problem, das sowohl beim Postback, als auch, was natürlich damit zusammenhängt, im Updatepanel jedesmal die falsche Zielurl benutzt wird.

Dies lässt sich so beheben:

1) eine neue form.browser im /App_Browsers anlegen, die so aussieht:

<browsers>

	<browser refID="Default">
		<controlAdapters>
			<adapter controlType="System.Web.UI.HtmlControls.HtmlForm"
					 adapterType="FormRewriterControlAdapter" />
		</controlAdapters>
	</browser>

</browsers>

2) eine FormRewriterControlAdapter.vb im Projekt hat, die so aussieht:

Imports Microsoft.VisualBasic

Public Class FormRewriterControlAdapter
	Inherits System.Web.UI.Adapters.ControlAdapter

	Protected Overrides Sub Render(ByVal writer As System.Web.UI.HtmlTextWriter)
		MyBase.Render(New RewriteFormHtmlTextWriter(writer))
	End Sub

End Class

Public Class RewriteFormHtmlTextWriter
	Inherits HtmlTextWriter

	Sub New(ByVal writer As HtmlTextWriter)
		MyBase.New(writer)
		Me.InnerWriter = writer.InnerWriter
	End Sub

	Sub New(ByVal writer As System.IO.TextWriter)
		MyBase.New(writer)
		MyBase.InnerWriter = writer
	End Sub

	Public Overrides Sub WriteAttribute(ByVal name As String, ByVal value As String, ByVal fEncode As Boolean)
		If (name = "action") Then
			Dim Context As HttpContext = HttpContext.Current
			If Context.Items("ActionAlreadyWritten") Is Nothing Then
				value = Context.Request.RawUrl
				Context.Items("ActionAlreadyWritten") = True
			End If
		End If
		MyBase.WriteAttribute(name, value, fEncode)
	End Sub

End Class

Ich habe diesen Tipp in Scott Gu’s Blog bei “Handling ASP-NET PostBacks with URL Redirecting” gefunden