2007-01-31

Hitta en kontroll i javascript (Ajax ASP.Net)

För att hitta en kontroll som har ID="MyControl" använd funktionen $get.
Exempel:
alert($get("MyControl").id);

Observera att det är motsvarande ClientID du ska använda. $get finns bara tillgänglig på en ASP.Net Ajax-sida.

Visa och dölj en ModalPopupExtender-popup

För att via kod visa en popup som en ModalPopupExtender hanterar som måste du sätta BehaviorID propertyn:
<ajaxToolkit:ModalPopupExtender...
BehaviorID="MyModalPopupExtender"
... />
Med hjälp av $find kan du få tag på instansen. Exempel på kod för att visa och dölja popupen.
<script language="javascript">
function hidePopup()
{
$find('MyModalPopupExtender').show();
}
function hidePopup()
{
$find('MyModalPopupExtender').hide();
}
</script>

2007-01-30

Asp.Net ViewState

Här är en bra artikel som förklarar ViewState i Asp.Net.
http://weblogs.asp.net/infinitiesloop/archive/2006/08/03/Truly-Understanding-Viewstate.aspx


Det mest intressanta:
  • De flesta kontroller sparar sina properties i ett fält som heter ViewState.
  • Initialt håller kontrollen inte koll på förändringar i ViewState.
  • Efter det att en kontroll har börjat att hålla koll på sitt ViewState, eller spåra förändringar av ViewState (dålig översättning av tracking ViewState) så kommer ändrade properties att markeras som dirty. Det är endast dessa properties som kommer att serialiseras ner till det dolda __VIEWSTATE fältet.
  • En kontroll börjar spåra förändringar av ViewState efter sin OnInit.
  • Sidans OnInit anropas efter alla kontollers, så vid det laget så spårar alla kontroller förändringar av sina ViewState.
  • Data som binds under sidans OnInit och OnLoad, t.ex. i Page_Load, kommer att serialiseras och skickas till klienten i __VIEWSTATE, eftersom kontrollerna spårar förändringar av ViewState. Detta innebär; Sätt inte properties på kontroller efter sidans OnInit om du inte vill att det ska hamna i __VIEWSTATE.
  • Properties på kontroller som sätts under sidans OnPreInit, dvs. innan kontrollerna börjat spåra förändringar av ViewState, kommer inte att hamna i __VIEWSTATE. Detta kan utnyttjas till att fylla kontroller med data som är billigt och enkelt att hämta vid varje postback, istället för att roundtrippa datat via klienten.
  • När du skapar kontroller via kod, t.ex. i metoden CreateChildControls i en custom control eller CompositeControl) så se till att sätta alla defaultvärden för properties innan du lägger till kontrollen i Controls .
    Innan du lägger till den så svävar kontrollen så att säga fritt i luften. Den känner inte till något om omvärlden och och "ingen" har fått den att börja spåra förändringar av ViewState. Efter det att du lagt till den i Controls finns det risk att kontrollen direkt efter Add-anropet kommer börja spåra förändringar (en kontroll som skapas sent i en sidan lifscykel får nämligen springa ikapp övriga kontroller och kommer därför direkt att raskt knata igenom alla events och så).