Zapamätanie si premennej   zodpovězená otázka

VB.NET, ASP.NET WebForms, ASP.NET MVC

Poradili by ste mi prosím, ako urobiť aby mi na stránke fungoval tento jednoduchý kód?

Partial Class _Default
    Inherits System.Web.UI.Page
    Dim hodnota, hodnota1 As Integer
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        hodnota = TextBox1.Text
        hodnota1 = hodnota1 + hodnota
        Label1.Text = hodnota1
    End Sub
End Class

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co na něm funguje, resp. nefunguje? Zaprvé, když přiřazujete do Integeru String, tak byste měl použít CInt: hodnota = CInt(TextBox1.Text).

A pokud chcete, aby se zapamatovala proměnná hodnota1, tak to nejde. Při každém požadavku se stránka jakoby vytáří znovu, při odeslání formuláře tlačítkem tedy máte jinou instanci objektu stránky (ta původní už neexistuje). Všechno, co si chcete zapamatovat, musíte uložit buď do session, cookies nebo ViewState, což bude v tomto případě nejlepší:

Partial Class _Default
    Inherits System.Web.UI.Page
    Dim hodnota, hodnota1 As Integer
    Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click
        hodnota = TextBox1.Text
        ViewState("hodnota1") = ViewState("hodnota1") + hodnota
        Label1.Text = hodnota1
    End Sub
End Class

Doporučuji si nastudovat tyto tři články o session, cookies a ViewState, ať rozumíte tomu, jak to funguje:

http://www.aspnet.cz/Articles/192-stavov...

http://www.aspnet.cz/Articles/191-stavov...

http://www.aspnet.cz/Articles/193-stavov...

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Ďakujem za kompletnú odpoveď.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Ale nefunguje to.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Jasně, hlava děravá. Při prvním použití vrací ViewState("hodnota1") Nothing, takže dojde k NullReferenceException. Do Page_Load přidejte ještě vynulování, pokud se stránka načítá poprvé:

If Not Me.IsPostBack Then
    ViewState("hodnota1") = 0
End If

Anebo můžete přímo v té proceduře testovat, jestli je ViewState("hodnota1") Nothing a pokud ano, tak do něj uložit proměnnou hodnota. Možností je víc.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Nie, nie. Stále to nefunguje.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

A co to znamená nefunguje? Háže to chybu, nebo to nic nedělá? To je dost široký pojem.

Nemáš náhodou ViewState vypnutý? Kdyžtak sem pošli ten kód celý.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Troška ma to mrzí, ale ak máš chvíľočku času, tak si to skús. S coocies to funguje. Ten kód bol celý. Po každom kliknutí na button niečo prirátať. Naozaj len keď máš čas. Nie je to až tak dôležité a tvoj čas si veľmi vážim.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

S tím ViewState mi to normálně funguje, samozřejmě že jakmile opustím stránku a vrátím se na ni znovu, ViewState se zruší, to je jeho vlastnost. Jestli jsi už na začátku požadoval, aby se to zachovalo natrvalo, pak jsi to do toho dotazu mohl napsat.

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Vďaka, Tomáš, preštudujem si to zajtra. Dám vedieť. Dobrú noc!

nahlásit spamnahlásit spam 0 odpovědětodpovědět

Malá chybička. Ďakujem!

 Label1.Text = ViewState("hodnota1")

nahlásit spamnahlásit spam 2 / 2 odpovědětodpovědět

Tohle je sice supr,ale treba pro datatable(data nactena z databaze) to nejde.

Říká to chybu:

Typ System.Data.DataView v sestavení System.Data, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 není označen jako serializovatelný.

nahlásit spamnahlásit spam 0 odpovědětodpovědět
                       
Nadpis:
Antispam: Komu se občas házejí perly?
Příspěvek bude publikován pod identitou   anonym.
  • Administrátoři si vyhrazují právo komentáře upravovat či mazat bez udání důvodu.
    Mazány budou zejména komentáře obsahující vulgarity nebo porušující pravidla publikování.
  • Pokud nejste zaregistrováni, Vaše IP adresa bude zveřejněna. Pokud s tímto nesouhlasíte, příspěvek neodesílejte.

přihlásit pomocí externího účtu

přihlásit pomocí jména a hesla

Uživatel:  
Heslo:  

zapomenuté heslo

 

založit nový uživatelský účet

zaregistrujte se

 
zavřít

Nahlásit spam

Opravdu chcete tento příspěvek nahlásit pro porušování pravidel fóra?

Nahlásit Zrušit

Chyba

zavřít

feedback