pondělí 5. prosince 2011

MVC3: odkaz v textu

MVC3 nabízí tuto metodu, pokud chceme na stránce vypsat odkaz:
@Html.ActionLink("klikni zde","Index")
Co ale dělat, pokud chceme vypsat odkaz jako součást delšího text, například:
Nejste registrován v našem systému, prosím klikněte zde a zaregistrujte se.

Řešením může byt rozdělení textu na části:
<p>Nejste registrován v našem systému, prosím klikněte @Html.ActionLink("zde","Index") a zaregistrujte se.</p>

To je fungující řešení – problém s ním ale nastane v okamžiku, kdy začneme stránku lokalizovat a texty umístíme do resource souborů – obvykle se pak celý text rozdělí na části:

image

a z nich se pak generuje stránka:
<p>@Resources.FirstPart @Html.ActionLink("zde","Index") @Resources.SecondPart</p>



To ale není příliš pěkné – vznikají zbytečné klíče. Spíše by bylo lepší mít toto:

image

Pokud ale zapíšeme tento kód:
<p>@string.Format(Resources.Registrace, Html.ActionLink("zde","Index"))</p>

objeví se nám na stránce:

image

Což není co bychom asi chtěli. Správný zápis totiž je:
<p>@Html.Raw(string.Format(Html.Encode(Resources.Registrace), Html.ActionLink("zde","Index")))</p>
A dostaneme:
image

Vysvětlení:


  • Html.Encode použijeme, abychom správně zakodovali HTML značky v původním textu, tedy aby resource mohl například obsahovat text “Musí být <> od 0”.
  • Html.Raw pak brání dalšímu kódování a text je vypsán tak jak je – nedojde tak k Html kodování vloženého odkazu.

Žádné komentáře:

Okomentovat