Vooraf: Dit is een technisch artikel. Denk je dat je het niet kunt volgen, dan klopt dat.

Het ASP.NET AJAX Control Toolkit bevat vele controls met AJAX ondersteuning die gratis gebruikt kunnen worden voor het ontwikkelen van een dynamische website.

Vol lof ben ik enkele weken terug begonnen om vele controls hieruit te gebruiken op dit weblog. De Collapsible panel voor het tonen van de reacties, de Animation extender voor het plaatsen van een reactie, de Validator Callout extender voor het mooi tonen van een 'vergeten veld', en het Rating control bij het plaatsen van een reactie voor het geven van een rapportcijfer voor een artikel.

Water en vuur
Niet alle controls kunnen samen werken. De standaard validators, en dus ook de Validator Callout, werken niet goed in een floating DIV, waar de reactie in getypt kan worden. Dus de validatie is al komen te vervallen. Ik heb ook gekeken naar de DropShadow extender, maar die functioneert niet in combinatie met een Animation extender. En nog een tip: gebruik geen Flash of ActiveX objecten omdat die altijd 'bovenop' liggen, ook al heb je een floating DIV met Z-order op het maximum.

Rating
Erg vervelend en onverwachts was het gedrag van het Rating control. Het valt op de test site niet op, maar als je op het control klikt, springt de pagina weer naar boven (top). Normaal niet zo'n probleem, maar wel als je halverwegen een pagina een reactie op een weblogartikel van Kobuz aan het schrijven bent, en het invoerscherm verdwijnt zodra je op de rating klikt.

Probleem
Na veel zoeken (Google groups) en testen, bleek het te liggen aan de manier hoe het control gerenderd wordt. Hij renderd een HTML anchor ( <a href="#" ... > ) met als HREF de waarde "#". Dit is nodig omdat een anchor zonder HREF niet geldig is. Maar een # verwijst naar de top van de pagina. Andere rating controls, zoals die van YouTube hebben hier geen last van...

Oplossing
Via Google groups ben ik bij een reactie van een Chinees genaamd fhmsha, dat het te maken had met de onclick. Toen viel het kwartje (of €0,20) bij mij. In de AJAX Control Toolkit zit inderdaad geen onclick in de anchor. Maar hoe los je dit op? Inderdaad: broncode aanpassen.

In file Rating.cs, in method RenderContents.cs heb ik het volgende toegevoegd:

writer.AddAttribute("onclick", "return false;"); // Bugfix by Marco Vervoort


Omdat ik toen toch op dreef was, heb ik ook tevens een duidelijke tooltip toegevoegd aan het rating control: (1) slecht, (2) aardig, (3) leuk, (4) cool, (5) super cool. Toevoeging in RatingBehaviour.js:


  /// <summary>
  /// Initialize the behavior
  /// </summary>
  AjaxControlToolkit.RatingBehavior.callBaseMethod(this, 'initialize');
  var elt = this.get_element();
  this._stars = [];
  for (var i = 1; i <= this._maxRatingValue; i++) {
    starElement = $get(elt.id +
'_Star_' + i);
    starElement.value = i;
    // Bugfix by Marco Vervoort: 
    // Voeg extra tooltips toe.
    switch
(i)
    {
      case 1: starElement.title = 'slecht'; break
;
      case 2: starElement.title = 'aardig'; break
;
      case 3: starElement.title = 'leuk'; break
;
      case 4: starElement.title = 'cool'; break
;
      case 5: starElement.title = 'super cool'; break
;
    }
    Array.add(
this._stars, starElement);
    $addHandler(starElement,
'click', this._starClickHandler);
    $addHandler(starElement,
'mouseover', this._starMouseOverHandler);
  }
  $addHandler(elt,
'mouseout', this._mouseOutHandler); 
  $addHandler(elt,
"keydown", this._keyDownHandler);
  this._update(); 
}

Conclusie:
Dit is voor mij de reden dat het Rating control van mij geen 10 krijgt.

Reacties

27-8-2007 21:54:36

Weet je zeker dat de rating werkt? Ik zie niks gebeuren in FF...

Eik

27-8-2007 22:46:34

Eens even kijken... Ik heb op 4 sterren geklikt. Je kunt het overigens alleen doen bij het plaatsen van een reactie.

Kobuz

27-8-2007 22:50:41

Yep, het werkt onder Firefox.

Ik denk dat er een misverstand is: je kunt niet op de 'sterren' klikken van het artikel zelf. Die zijn alleen om aan te geven wat de gemiddelde stemming is. Alleen bij het plaatsen van een reactie, net onder het web site invulveld, kun je stemmen.

Kobuz

29-8-2007 20:57:09

Ik zie het, misverstandje. Maar als ik nou wil raten zonder te reageren!

Eik

Reacties zijn gesloten