När jag trycker på knappen som finns på sidan skrivs variablen slumpat över och blir 0. Du behöver spara undan variabeln mellan anropen. ASP.NET är stateless och sparar inte värdena per automatik mellan requests. Du har ett par alternativ. Spara variabeln i en Sessionsvariabel typ: Anledningen till att du får talet 0 vid postback är för att du inte gett din variabel något värde än. ok, tack för hjälpen. Nu fungerar det som det ska. nästa problem jag har är: Snutten körs väl vid varje postback? jo, den körs varje gång. Hur gör jag så innehållet stannar kvar i stringbuildern? Lägg in värde från din StringBuilder i ViewState och läs upp den vid postback... Precis som slumptalet... Eller så gör du som Andreas föreslog. Läs av värdet i din label och bygg vidare på det. Du behöver dessutom inte använda en StringBuilder när du bara gör ett fåtal konkateneringar per postback. Då är det effektivare med en vanlig sträng... Förslag:nybörjarproblem med variabel
har koden:
<code>
public partial class _Default : System.Web.UI.Page
{
private int slumpat;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
myRandom();
}
lblMsg.Text = this.slumpat.ToString();
}
protected void myRandom()
{
Random r = new Random();
this.slumpat = r.Next(99) + 1;
}
}
</code>
Hur får jag det slumpade talet att "stanna kvar"?
Tacksam för all hjälp :DSv: nybörjarproblem med variabel
<code>
Session["slumptal"] = slumpat;
</code>
eller i ett hiddenfält...
eller i ViewState typ:
<code>
ViewState["slumptal"] = slumpat;
</code>
personligen skulle jag nog skriva om och göra följande typ:
<code>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
int slump;
if (!IsPostBack)
{
slump = GetRandom();
ViewState["slump"] = slump;
}
else
{
slump = (int)ViewState["slump"];
}
lblMsg.Text = slump .ToString();
}
protected int GetRandom()
{
Random r = new Random();
return r.Next(99) + 1;
}
}
</code>
Kanske inte helt perfekt lösning eller skrivet, men det är snabbt och enkelt.Sv: nybörjarproblem med variabel
För att lösa det kan du flytta in "lblMsg.Text = this.slumpat.ToString();" innanför din if-sats där du kontrollerar ifall det är en postback.
För att illustrera med lite kod kan du använda dig av följande:
<code>
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Random r = new Random();
lblMsg.Text = (r.Next(99) + 1).ToString();
}
}
}
</code>
Jag hoppas jag uppfattade ditt problem rätt.
Edit: Om du sedan vill ha tillbaka ditt slumpade värde vid postback hämtar du det via "lblMsg.Text".Sv:nybörjarproblem med variabel
<code>
public partial class _Default : System.Web.UI.Page
{
private StringBuilder stGissade = new StringBuilder();
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["slump"] = GetRandom();
ViewState["forsok"] = 7;
}
lblInfo.Text = "Gissning nr. " + ViewState["forsok"] + ".";
}
protected void btnGissa_Click(object sender, EventArgs e)
{
try
{
int gissat = int.Parse(txtTal.Text);
int forsok = (int)ViewState["forsok"] - 1;
int slump = (int)ViewState["slump"];
ViewState["forsok"] = forsok;
stGissade.Append(gissat);
if (forsok > 0 && slump == gissat)
{
lblMsg.Text = "Grattis. Du klararde det på " + forsok + "försök";
end();
}
lblGissat.Text = stGissade.ToString();
}
catch (FormatException fe)
{
lblMsg.Text = "Strängen som skickades in var i ett felaktigt format";
}
}
protected int GetRandom()
{
Random r = new Random();
return r.Next(99) + 1;
}
}
</code>
Problemet är nu att jag vill spara alla gissade tal i en stringbuilder (stGissade.Append(gissat);)
men som innan skrivs det över varje gång man trycker på knappen.
Hur löser jag detta??
Tacksam för all hjälpSv: nybörjarproblem med variabel
<code>
private StringBuilder stGissade = new StringBuilder();
</code>Sv:nybörjarproblem med variabel
Sv: nybörjarproblem med variabel
<code>
public partial class _Default : System.Web.UI.Page
{
private string stGissade;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["slump"] = GetRandom();
ViewState["forsok"] = 7;
}
else
{
stGissade = (string)ViewState["stGissade "];
}
lblInfo.Text = "Gissning nr. " + ViewState["forsok"] + ".";
}
protected void btnGissa_Click(object sender, EventArgs e)
{
try
{
int gissat = int.Parse(txtTal.Text);
int forsok = (int)ViewState["forsok"] - 1;
int slump = (int)ViewState["slump"];
ViewState["forsok"] = forsok;
stGissade += gissat.ToString();
if (forsok > 0 && slump == gissat)
{
lblMsg.Text = "Grattis. Du klararde det på " + forsok + "försök";
end();
}
lblGissat.Text = stGissade;
ViewState["stGissade "] = stGissade;
}
catch (FormatException fe)
{
lblMsg.Text = "Strängen som skickades in var i ett felaktigt format";
}
}
protected int GetRandom()
{
Random r = new Random();
return r.Next(99) + 1;
}
}
</code>
alternativt
<code>
public partial class _Default : System.Web.UI.Page
{
private string stGissade;
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
ViewState["slump"] = GetRandom();
ViewState["forsok"] = 7;
}
else
{
stGissade = lblGissat.Text;
}
lblInfo.Text = "Gissning nr. " + ViewState["forsok"] + ".";
}
protected void btnGissa_Click(object sender, EventArgs e)
{
try
{
int gissat = int.Parse(txtTal.Text);
int forsok = (int)ViewState["forsok"] - 1;
int slump = (int)ViewState["slump"];
ViewState["forsok"] = forsok;
stGissade += gissat.ToString();
if (forsok > 0 && slump == gissat)
{
lblMsg.Text = "Grattis. Du klararde det på " + forsok + "försök";
end();
}
lblGissat.Text = stGissade;
}
catch (FormatException fe)
{
lblMsg.Text = "Strängen som skickades in var i ett felaktigt format";
}
}
protected int GetRandom()
{
Random r = new Random();
return r.Next(99) + 1;
}
}
</code>
Nått sånt bör fungera...