Kategorie: Development

Globaler Seitentitel mit ASP.NET MVC

Der Onlineversand Nerd Pizza besitzt ein in ASP.NET MVC entwickeltes Bestellsystem. Grundsätzlich sind die Pizzabäcker auch zufrieden, eine kosmetische Änderung möchten sie aber gerne noch erledigt haben. Momentan finden sich auf jeder Seite des Bestellsystems individuelle Seitentitel: Pizza bestellen, Bezahlmethode auswählen, etc. Im Sinne der Coporate Identity soll nun vor jedem dieser Titel noch “Nerd Pizza – “ stehen.

Eigentlich sollte das einfach zu lösen sein: Vor dem Platzhalter-Tag in der Masterseite fügen wir den globalen Seitentitel hinzu und schon sollte die Seite so gerendert werden wie gewünscht.

<title>
  Nerd Pizza -
  <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>

Doch leider fehlen in der ausgelieferten Webseite die Worte “Nerd Pizza”. EIn Blick in den HTML-Code zeigt uns nur den eigentlichen Titel der Seite:

<title>
  Pizza bestellen
</title>

Die Lösung lautet in diesem Falle ein asp:Literal-Tag zu verwenden. Folgendes in der Masterpage

<title>
  <asp:Literal runat="server" Text="Nerd Pizza - " />
  <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
</title>

führt zum gewünschten HTML-Code:

<title>
  Nerd Pizza - Pizza bestellen
</title>

Problem gelöst, Zeit die Bestellfunktion ausgiebig zu testen. :)

xn--bullshit

Ich dachte zuerst, unsere Testfunktion für ACE-Strings ist buggy.

Aber nein! Die spontan für ungültig gehaltene Eingabe xn--bullshit ist tatsächlich gültig. Die IDN-Form lautet: 㟰㟦㟳㟮㟬㟠 (U+37F0 U+37E6 U+37F3 U+37EE U+37EC U+37E0). Das ist bullshit in Han-chinesisch ;) .

Scheint auch noch weitgehend verfügbar zu sein, falls noch jemand einen lustigen Domainnamen sucht … :D

Update:
xn--bullshit.com und xn--bullshit.net wurden jetzt erstmal registriert. Falls jemand eine überzeugende Idee hat, was man damit anfangen kann, lässt sich über eine Übernahme reden!

Internet Explorer und der “div”-Tag

Vor kurzem stand ich vor folgendem Szenario bei der Entwicklung mit ASP.NET MVC und JQuery:

Ich hatte eine Website erstellt, die dynamisch Inhalte vom Server nachgeladen hat. Gut, werden sich jetzt einige denken, das ist doch inzwischen Standard und sollte keine Probleme bereiten. Für gewöhnlich ist dies auch so, jedoch gab es hier eine Ausnahme: den Internet Explorer.

Man denke sich folgenden vereinfachten Quellcodeabschnitt:

<input type="text" onchange="$.get("/myController/Search",
   {query :  $(this).val()},
   function (resultValue)
   { $('#result_placeholder').html(resultValue); }  />
<div id="result_placeholder" />
<input type="submit" value="Suche starten" />

Mit eigenen Worten beschrieben: Gibt man etwas in das Textfeld ein, wird eine Anfrage mit dem Inhalt der Textbox an den Server gesendet und Resultate in das div mit der Id result_placeholder hineingeschrieben.

Das klappte auch wunderbar. Jedoch war daraufhin mein “Suche starten”-Knopf verschwunden und ich konnte mir nicht erklären warum. Durch eine Analyse des zur Laufzeit vorliegenden Quelltextes konnte ich dann auch sehen, dass mein Submit-Button tatsächlich nicht mehr vorhanden war. Es stellte sich mir also die Frage, wieso er im Internet Explorer verschwand und in allen anderen Browsern weiterhin vorhanden war.

Die Lösung des Ganzen ist relativ einfach. Anstatt <div id=”result_placeholder” /> schreibt man <div id=”result_placeholder”></div> in den Quelltext, dann wird der Inhalt richtig gesetzt und auch der “Suche starten”-Button ist weiterhin vorhanden. :-)

Edit:

<!DOCTYPE html PUBLIC “-//W3C//DTD XHTML 1.0 Strict//EN” “http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd“>
<html xmlns=”http://www.w3.org/1999/xhtml“>

Diesen DOCTYPE verwende ich bei dem oben genannten Problem. Laut W3C ist damit das Dokument als XHTML ausgezeichnet und mein “<div />” standardmäßig erlaubt. In dem Zusammenhang ist auch meine Beobachtung zu betrachten.

Probleme mit NUnit und .NET 4.0

.NET-Entwickler, die in diesen Tagen ihre Projekte auf die Frameworkversion 4 hochgezogen haben und NUnit benutzen, sehen sich mit einem Problem konfrontiert. Die Tests werden zwar durchlaufen, gesetzte Breakpoints jedoch ignoriert. Auch wenn man die Projekte als DEBUG kompilieren lässt, zeigt Visual Studio an:

The breakpoint will not currently be hit. No symbols have been loaded for this document.

Ursache ist wohl, dass die aktuellen Binaries von NUnit mit Version 2.0 kompiliert wurden, denn nach einem Targetwechsel auf 4.0 in den Projekten funktioniert nunit.exe wie gewohnt. Bis neue Binaries vom NUnit-Team bereitgestellt werden, muss man halt den Weg des Selbstkompilierens gehen (Quellcode unter http://www.nunit.org/index.php?p=download zum Download).

Für alle, die sich nicht die Mühe machen wollen, haben wir die offizielle ZIP-Datei von NUnit um die Binaries für .NET 4.0 erweitert (zu finden unter \NUnit-2.5.5.10112\bin\net-4.0) und zum Download bereitgestellt.

Achtung : http.net ist nicht der Hersteller von NUnit, der Download ist ohne jegliche Haftung  und ohne Support durch uns!

Man beachte die enthaltene GPL und zlib License. (Weitere Informationen unter http://www.nunit.org/)

Download: NUnit-2.5.5.10112_NET4.zip (NUnit 2.5.5 with binaries for .NET 4)