Hej, Om förutsättningarna för "gömningen" finns kvar efter postback så kan man bryta ut gömnings-koden i en funktion och köra den vid laddning. Ja, det skulle kunna vara en möjlighet. Viewstate påverkas inte av någonting alls som händer i webbläsaren. Alltså kan du inte läsa ut någonting ifrån viewstate om vad som hänt sedan sidan skickades till webbläsaren. Du skulle också kunna ha en hidden checkbox, som du ändrade mellan checked och unchecked i javascripts-funktionen. Och sedan tittade på den i codebehind-sidan för att kunna sätta visibility där också. Då måste jag ha missförstått hela konceptet. Jag trodde viewstate fanns till just för att behålla information vid återpostningar. Problemet är att ViewState-info skapas på Servern som en lång BASE64-encodad sträng i ett hidden-fält. När klienten sedan postar tillbaka till servern så följer den viewstateinformationen tillbaka till servern och den kan återskapa det den kände till från början. Det finns en klass i System.Web.UI.HtmlControls som heter något i stil med HtmlHiddenInput eller liknande, släng ut en sådan på sidan, på klienten körs i onload sedan en liten snutt som läser av fältet. Varje gång något ändras så ändras också fältet. Klassen ser själv till att behålla värdet mellan postningarna > Då måste jag ha missförstått hela konceptet. Jag trodde viewstate fanns tillbibehålla style vid återpostning
Jag har en sida med custom controls i.
En av dessa som innehåller en DropDownList har ett onChange event på sig, typ:mySelect2.Attributes.Add("onChange", "javascript: document.getElementById('_ctl4_en_input').style.visibility = 'hidden';")
Detta event gör att när man väljer någonting i dropdown listan så 'göms' en textbox som finns i en annan custom control.
Problemet är att vid återpostningar så återställs detta. (textboxen är att alltid synlig efter en återpostning).
Hur gör jag för att behålla detta attributvärde efter en återpostning??
/undrar max
Sv: bibehålla style vid återpostning
Nedan är ett script som gör motsvarande
// MvH Björne
private void Page_Load(object sender, System.EventArgs e)
{
string script =
@"<script>
function fixTextBoxVisibility() {
var txt = document.getElementById('txtCountry');
var dd = document.getElementById('ddCountry');
var visible = dd.options[dd.selectedIndex].value == '-1';
txt.style.visibility = visible ? 'visible' : 'hidden';
}
</script>";
this.RegisterClientScriptBlock("fixTextBoxVisibilityScript", script);
ddCountry.Attributes.Add("onChange", "fixTextBoxVisibility();");
this.RegisterStartupScript("runFixTextBoxVisibilityScript", "<script>fixTextBoxVisibility();</script>");
}
Sv:bibehålla style vid återpostning
En annan möjlighet skulle kanske kunna vara att spara/läsa aktuellt 'visibilty' tillstånd i kontrollens SaveViewState/LoadViewstate , eller?
Det kanske inte går att läsa ett attributvärde som är satt av ett javascript?
/maxSv: bibehålla style vid återpostning
Sv:bibehålla style vid återpostning
Sv:bibehålla style vid återpostning
T.ex. behålla texten användaren skrvit in i en textbox trots att sidan laddats om pga att en knapptryckning eller dylikt.Sv: bibehålla style vid återpostning
Den nya information som användaren t ex skrivit in i textrutor etc följer med submit-informationen.
Style-informationen kommer inte upp till servern via submit, och kändes i det här fallet inte till av servern när den skapade viewstate:n
Hoppas det inte känns mer krångligt. ;-)
// MvH BjörneSv:bibehålla style vid återpostning
Sv: bibehålla style vid återpostning
> just för att behålla information vid återpostningar.
> T.ex. behålla texten användaren skrvit in i en textbox trots att sidan laddats
> om pga att en knapptryckning eller dylikt.
Nej, det är inte viewstate som används till det.
Viewstate används till exempel för att servern ska veta vad som stod i textboxen innan användaren skrev i den, så att den kan jämföra det gamla och nya värdet så att den vet om den ska köra eventet TextChanged.