J'essaie d'obtenir une image de fond choisie au hasard (à partir d'une sélection de 4 images) pour apparaître comme image de fond pour un panneau asp.net.Image d'arrière-plan aléatoire sur DIV
Le problème que j'ai est que le code fonctionne en passant par le code en mode débogage. Une fois que vous exécutez le code sur le site sans débogage, toutes les images sont les mêmes. C'est presque comme si le nombre aléatoire ne se faisait pas ramasser assez rapidement.
L'usercontrol est à l'intérieur d'un datalist.
Le usercontrol est la suivante:
<asp:Panel ID="productPanel" CssClass="ProductItem" runat="server">
<div class="title" visible="false">
<asp:HyperLink ID="hlProduct" runat="server" />
</div>
<div class="picture">
<asp:HyperLink ID="hlImageLink" runat="server" />
</div>
<div class="description" visible="false">
<asp:Literal runat="server" ID="lShortDescription"></asp:Literal>
</div>
<div class="addInfo" visible="false">
<div class="prices">
<asp:Label ID="lblOldPrice" runat="server" CssClass="oldproductPrice" />
<br />
<asp:Label ID="lblPrice" runat="server" CssClass="productPrice" /></div>
<div class="buttons">
<asp:Button runat="server" ID="btnProductDetails" OnCommand="btnProductDetails_Click"
Text="Details" ValidationGroup="ProductDetails" CommandArgument='<%# Eval("ProductID") %>'
SkinID="ProductGridProductDetailButton" /><br />
<asp:Button runat="server" ID="btnAddToCart" OnCommand="btnAddToCart_Click" Text="Add to cart"
ValidationGroup="ProductDetails" CommandArgument='<%# Eval("ProductID") %>' SkinID="ProductGridAddToCartButton" />
</div>
</div>
et le code est derrière ceci:
protected void Page_Load(object sender, EventArgs e)
{
// Some code here to generate a random number between 0 & 3
System.Random RandNum = new System.Random();
int myInt = RandNum.Next(4);
if (productPanel.BackImageUrl != null)
{
switch (myInt)
{
case 0:
productPanel.BackImageUrl = "../App_Themes/emmaharris/images/frame1.gif";
break;
case 1:
productPanel.BackImageUrl = "../App_Themes/emmaharris/images/frame2.gif";
break;
case 2:
productPanel.BackImageUrl = "../App_Themes/emmaharris/images/frame3.gif";
break;
case 3:
productPanel.BackImageUrl = "../App_Themes/emmaharris/images/frame4.gif";
break;
}
}
// End of new code to switch background images
}
T
je pense que votre sur quelque chose !! la page cite "Si vous utilisez deux fois la même valeur de départ, vous obtiendrez la même séquence de nombres aléatoires.Al Random utilise l'heure actuelle comme la graine.Le code ci-dessus crée plusieurs instances dans une succession très rapide, et" l'heure actuelle " a tendance à avoir une granularité d'au moins 10ms, donc beaucoup d'instances partageront la même graine et créeront ainsi la même séquence de nombres. " Je crois que le code s'exécute aussi vite qu'il obtient le même code temporel "seed" que les autres panneaux et donc la même image. J'ai besoin d'une méthode aléatoire plus robuste. –
@Ian - Jetez un oeil à la classe MiscUtility de Jon qui a un générateur aléatoire «Robuste». (lien en post). J'ai également édité le post pour inclure son code. –
@ smurf Smurf, en utilisant le code de miscutility a résolu le problème. Merci à tous pour votre aide. –