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.
b6298816-3a1c-4437-81f9-0599b5aa7a6c|0|.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>
307af6d1-4a80-4214-ab1d-37854ea1d6d6|0|.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.
5b024cf9-d68c-4375-948d-2b983d6dacd1|0|.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
6623a3df-4675-4bf0-9a83-bd457381146c|0|.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
760ba754-acaa-495e-b841-885622481a15|0|.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
975765dc-a6ab-4772-9930-c07023197a08|0|.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>
ff116b1c-7f70-4912-ad24-7cf2d9ab3667|0|.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
c2064139-ed45-4286-9fe1-e28306feee61|0|.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)
6113bb6c-9995-461c-b33f-3a6247497baf|1|5.0
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.
2b3c8a1b-fabd-4bc8-9047-294a4079702a|0|.0