String replace ASP.net Razor szintaktika

String replace ASP.net Razor szintaktika
2012-10-07T14:45:02+02:00
2012-10-08T11:11:00+02:00
2022-11-27T01:41:59+01:00
MaXs
Üdv!

@foreach(var sor in eredmeny) { //Tagek var tags = Html.Raw(Html.Encode(sor.szoveg).Replace("\n", "<br />")); tags = Html.Raw(Html.Encode(tags).Replace("[cim1]", "<h1>")); tags = Html.Raw(Html.Encode(tags).Replace("[/cim1]", "</h1>")); <div style="border: 0px solid black; margin: 5px; padding-left: 10px "> <tr></tr> <h5>@sor.irta, @sor.datum</h5> <br> <h2>@sor.cim</h2> <br> @tags <hr> </div> }

Az alábbi kóddal szeretném elérni, hogy az adatbázisból visszakapott értékeket kiolvassam, és a sortörést,[cim1], [/cim1] tageket helyettesítsem <h1> és </h1> -re.

A hiba az, hogy ha csak egyet, mondjuk a var tags = Html.Raw(Html.Encode(tags).Replace("[cim1]", "<h1>")); cserélem le, akkor működik, vagy épp csak a sortörést, de ha egynél többet, akkor az alábbi eredményt kapom vissza:

&#220;dv&#246;z&#246;llek a weblapon! <br />Mi a helyzet?

Tehát megváltozik a karakterkódolás..

Valakinek valamilyen ötlet?
Mutasd a teljes hozzászólást!
1. Az ilyen feldolgozást én a Controller-ben végezném, nem a View-n.

2. Láncold a Replace-eket egymás után, hiszen a második Replace-től a már encode-olt stringben próbálsz cserélni.

Kb. így (nem tesztelve, de az ötletet megadhatja):

var tags = Html.Raw(Html.Encode(sor.szoveg.Replace("\n", "<br />").Replace("[cim1]", "<h1>").Replace("[/cim1]", "</h1>")));

Ez így persze elég ronda, ezért ld. az 1-es javaslatot.

3. A string-ek automatikusan encode-olódnak, így a Html.Encode tulajdonképpen nem is csinál semmit. Viszont a teljesen raw html-t csak megbízható forrás esetén kéne megjeleníteni. Tehát valahogy teljesen át kéne gondolni a megjelenítést, mert ez így többféle problémát okozhat.

Valahogy úgy csinálnám, hogy már a Controller-nél leválogatnám a megjeleníteni kívánt rekordokat, eltüntetve a [cim1] stb. tag-eket, és a strukturált objektumot (pl. List-ben) adnám át a View-nak. Ott pedig a Razor segítségével végezném a formázást.
Mutasd a teljes hozzászólást!

  • Ha először CSAK encode-olnád és utána replace?
    Mutasd a teljes hozzászólást!
  • 1. Az ilyen feldolgozást én a Controller-ben végezném, nem a View-n.

    2. Láncold a Replace-eket egymás után, hiszen a második Replace-től a már encode-olt stringben próbálsz cserélni.

    Kb. így (nem tesztelve, de az ötletet megadhatja):

    var tags = Html.Raw(Html.Encode(sor.szoveg.Replace("\n", "<br />").Replace("[cim1]", "<h1>").Replace("[/cim1]", "</h1>")));

    Ez így persze elég ronda, ezért ld. az 1-es javaslatot.

    3. A string-ek automatikusan encode-olódnak, így a Html.Encode tulajdonképpen nem is csinál semmit. Viszont a teljesen raw html-t csak megbízható forrás esetén kéne megjeleníteni. Tehát valahogy teljesen át kéne gondolni a megjelenítést, mert ez így többféle problémát okozhat.

    Valahogy úgy csinálnám, hogy már a Controller-nél leválogatnám a megjeleníteni kívánt rekordokat, eltüntetve a [cim1] stb. tag-eket, és a strukturált objektumot (pl. List-ben) adnám át a View-nak. Ott pedig a Razor segítségével végezném a formázást.
    Mutasd a teljes hozzászólást!
  • Nos, utána néztem jobban mit is foglal magába a Html.Raw, és a Html.Encode tényleg felesleges. Valóban elég az egyszeri Encode, szóval jó nagy hülyeséget csináltam. :D A te verziód teljesen működőképes, bár egy kicsit másképp csinálom.

    Köszönet nektek!
    Mutasd a teljes hozzászólást!
Tetszett amit olvastál? Szeretnél a jövőben is értesülni a hasonló érdekességekről?
abcd