Random i web controllern?
Jag her en web controll som jag tänkt använda flera ggr på samma sida. Den ska fram ett random tal, vilket den också gör, men random talet blir det samma för varje gång jag använder controllern på samma sida. Hur fixar jag till det?
<code>
<script language="C#" runat="server">
void Page_Load(Object Src, EventArgs e)
{
Random myRandom = new Random();
lblText.Text = myRandom.Next(10000).ToString();
}
</script>
<asp:label ID="lblText" runat="server"/>
</code>
Svara
Sv: Random i web controllern?
byt ut följande rad:
Random myRandom = new Random();
mot följande kod:
Int32 iT
try
{
iT = (Int32)Session.Item("iT");
iT = iT_XOR_(Int32)(System.DateTime.Now.Ticks&&System.Int32.MaxValue);
}
catch()
{
iT = (Int32)(System.DateTime.Now.Ticks&&System.Int32.MaxValue);
}
Random myRandom = new Random(iT);
Session.Item("iT")=myRandom.Next();
Vad den här koden gör är att först försöka få tag på det gamla slumptalet. Sedan köra xor på det med aktuell tid. Om nå't går fel (talet fanns inte sen tidigare) så blir talet den aktuella tiden helt enkelt. Sedan initsieras slumtalsgeneratorn med det talet. Till sist sparas "basen" för nästa kontrolls slumpande i sessionen... Dvs. initsieringsvärdet skall alltid vara olika...
Det borde fungera hoppas jag... :)
Svara
Sv: Random i web controllern?
Tyvärr så hjälpte det inte, var några syntaxfel här och där men de var snabbt fixade. Det tog stopp vid att den inte gillade att köra && mellan en long och int32, det kunde jag inte lösa.
Tykte om din idé om att spara det gammla talet i en session, försöker nu att spåra vidare på det så länge.
Svara
Sv: Random i web controllern?
Löste det hela genom att skicka med en random variabel till controllern. Det har sina nakdelar med att man bara kan ha 4 st olika controller men fler än så behöver inte jag. Om någon har en bättre kod/förslag så blir jag ändå glad.
<code>
public int random = 0;
void Page_Load(Object Src, EventArgs e)
{
Random myRandom = new Random();
if (random == 0)
lblText.Text = myRandom.Next(10000).ToString();
else
myRandom.Next(10000);
if (random == 1)
lblText.Text = myRandom.Next(10000).ToString();
else
myRandom.Next(10000);
if (random == 2)
lblText.Text = myRandom.Next(10000).ToString();
else
myRandom.Next(10000);
if (random == 3)
lblText.Text = myRandom.Next(10000).ToString();
else
myRandom.Next(10000);
}
</code>
Svara
Sv: Random i web controllern?
Byt ut
(Int32)(System.DateTime.Now.Ticks&&System.Int32.MaxValue);
mot
(Int32)(((Int32)(System.DateTime.Now.Ticks))&&System.Int32.MaxValue);
och testa
Svara