Tag Archives: ASP.NET 2.0

szeméremajax

az milyen már, hogy a dotnethez kiadott hivatalos microsoft-os ajax kiegészítés rögtön teljes oldalt frissít, mihelyst olyan controlok kerülnek az UpdatePanel-be, amire a készítők nem számítottak.

ilyen mondjuk egy pórias LinkButton, ami azért, lássuk be, nem egy bonyolult darab.

most ezért írjak client side scriptet?

Tags: ,

két nap alatt

írtam egy egyszerű wiki-t asp.net és ms sql platformon. azér’ az nem rossz. ehhez viszont meg kellett tanulnom a reguláris kifejezéseket, amitől eddig sikeresen elzárkóztam. egész pofás kis enterprise dashboard lesz belőle. írok majd róla post-sorozatot.

jó, a hangsúly az egyszerűn van, de wikit írni alapvetően nem nagy kihívás. van egy táblád a megírt dokumentumoknak, plusz elfelejted az sql update parancsát. nincs update, csak insert van: a cím azonosítja a topicokat, a sok azonos című dokumentum között meg egy timestamp mező alapján tudsz különbséget tenni, megjeleníteni a legfrisebbet kell, de a korábbi verziók, és ezzel a változások is visszakereshetőek. amikor valaki szerkeszt egy dokumentumot, akkor a régit békén kell hagyni és eltárolni az új verziót.

ja, és kitalálni valami szintaxist, hogy mondjuk a dupla szögletes zárójelbe tett kifejezéseket wiki-n belüli linkekre cseréled a megjelenítéskor valami regexp-pes okossággal egy ilyesmi event handler-ben:

Protected Sub docBody_PreRender(
  ByVal sender As Object,
  ByVal e As System.EventArgs)

    Dim body As Label = sender

    Dim regexp As New Regex("[[([w| |-|]+)]]")
    ' internal wiki links
    body.Text = Regex.Replace(
        body.Text,
        "[[([w| |-|,|.|(|)]+)]]",
        "<a href=""default.aspx?title=$1"">» $1</a>")
    ' images
    body.Text = Regex.Replace(
        body.Text,
        "[:([w| |-|,|.|(|)]+):]",
        "<img src=""../img/wiki/$1"" />")
End Sub

Tags: , ,

az milyen már

hogy a microsoft által átvizsgált és kiadott, hivatalos asp.net 2.0 css friendly control adapters csomagban, közelebbről a GridViewAdapter.vb fájlban, forráskód szinten kell javítani, ha azt akarod, hogy html-ben a <table> örökölje a dizájnban a gridview celláinak megadott attribútumokat.

eredetileg csak a cssclass attribútumot viszi át, tehát nyilván az volt a koncepciójuk, hogy minden a css-be kerül, csak hát amikor van 100 oldalon 200 táblázatod, összesen 795 oszloppal, akkor a css a 795 oszlop számára egyenként definiált osztállyal meglehetősen bonyolult lesz.

szent szar, ilyenekre mennek el 20-30 percek.

Tags: ,

mégegyszer, utoljára .NET és MySql

a MySQL ODBC-meghajtója egyszerűen nem jó. magyargyűlölő szoftver. a szolgáltatóm supportja azt mondta, hogy csak a kódolást kell rendesen beállítani az adatbázisban és a táblákon UTF-8-ra, azonban az összes lehetséges permutáció végigpróbálgatása után, de még mezőszinten is babrálva, letettem arról, hogy valaha ő és ű karaktereket lássak viszont az oldalon.

a .NET connector működik, viszont van egy komoly szépséghibája, púpos kizárólag full trust módban hajlandó futni. ha valakinek saját szervere van, annak esetleg jó lehet, a web hosting szolgáltatók viszont, a több alkalmazást futtató shared szervereikkel eleve fel sem telepítik. a full trust és a shared szerver sehogysem jön össze, vagy ha mégis, akkor az komoly biztonsági rés: bármelyik alkalmazás hozzáfér bármelyik másik alkalmazás adataihoz. (lásd pl. K. Scott Allen)

jó lenne

ha fenn lenne a .NET connector, akkor nagyjából négy lépésből állna egy primitív oldal elkészítése: 1. bedobni egy SqlDataSource controlt; 2. beállítani rajta, hogy a provider a MySql.Data.MySqlClient, mi a connection string és mi a select command (a képen); 3. bedobni egy data-aware controlt; 4. beállítani rajta, hogy az előbbi SqlDataSource az adatforrása és hogy melyik mezőt jelenítsemeg.

ez kódban körülbelül ennyi:

<asp:sqldatasource
    id="dsBlogEntries" runat="server"
    connectionstring="Database=yourDatabase;Data
    Source=yourServer;User Id=userID;Password=password"
    providername="MySql.Data.MySqlClient"
    selectcommand="SELECT * FROM `blog-entries` ORDER
    BY id DESC"></asp:sqldatasource>

az adatforrás és - a DataList controlt most ugorgyuk át - mellé egy szövegcímke, ami kiírja a blogpost címét:

<h1><asp:label id="titleLabel" runat="server" text='<%# Eval("title") %>'>
</asp:label></h1>

de ezt csak azért mondtam el,

amiért amszterdam is létezik - hogy lássuk, hogy ilyen is van, csak mi nem vagyunk méltóak rá. ezért élünk a budapesti állatkertben.

a manual workaround kalandos kicsit. a .NET lehetőséget nyújt arra, hogy az alkalmazás bin könyvtárában előre lefordított, bináris állományokat tároljunk és hívogassunk meg. szigorúan csak kódból. ha ide, a bin könyvtárba betesszük a mysql hivatalos connectorát és elkezdenénk használni, akkor jutunk el ahhoz a rémesen frusztráló hibaüzenethez, hogy “That assembly does not allow partially trusted callers”. a full és a medium trust, ugye.

de nincs minden veszve. jött pár álarcos hős és visszatolták a döglött lovat a szomszéd telkére. vagyis forrásban töltötték le a MySql AB connectorát, kijavították és elérhetővé tették úgy, hogy a bin medium trustban is fut. mit fut, szakít! ezt a mysql.data.dll-t kell betenni a bin könyvtárba.

azért a vizuális részét el lehet felejteni a dolognak, mivel a szerverre nincsen feltéve a natív kliens és a bin könyvtár dll-jei csak kódból hívhatóak, nincsen értelme SqlDataSource controlt bedobni az oldalba és két kattintással megmondani neki, hogy a MySqlClient a data provider, ezzel csak csak újabb application errorhoz jutunk el. helyette, vagyis a fenti pár soros kód helyett, ez van (primitív megközelítésben, minden cizellálás nélkül):

Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs)
  Handles Me.Load
    Dim conn As MySqlConnection = _
    New MySqlConnection("Server=yourServer;User
      Id=userID;Password=password;Database=yourDatabase;
      Pooling=false;")    Dim strSQL As String = "SELECT * FROM `blog-entries` ORDER BY id DESC;"
    Dim blogDataA As MySqlDataAdapter = New MySqlDataAdapter(strSQL, conn)
    blogDataA.SelectCommand = New MySqlCommand(strSQL, conn)
    Dim ds As DataSet = New DataSet("dsBlog")
    blogDataA.Fill(ds)
    blogMain.DataSource = ds
    blogMain.DataBind()
End Sub

ahol is a blogMain egy DataList control, amiben van többek között a fenti címke is, ami a post címét jeleníti meg.

nem az a baj vele, hogy többet kell gépelni, nem számottevő. inkább az, hogyilyen nyakatekert módon, mondjuk a Page_Load eseményben, vagy a DataList init eseményébenkell ezt kezelni, dizájn helyett - teljesen feleslegesen - kódolni.

Tags: , ,

fizetek

egy sört annak, aki megmondja, hogy a MySQL adatbázisban még rendesen meglévő ékezeteket (ő és ű) miért nem győzi le az asp.net 2.0. nyilván én tolok el valamit, de mit?

nacionalgaleri-at-gmail-dot-com

Tags: ,