J'ai hérité d'un projet qui utilise le modèle suivant pour passer des paramètres du code derrière à la page ASPX. Je sais que c'est faux, mais je suis sur la clôture sur la meilleure façon de le refactoriser.Comment refactoriseriez-vous les membres de pages en code ASPX?
codeDerrière:
using System;
using System.Web;
namespace BadPassing
{
public partial class _Default : System.Web.UI.Page
{
private Random rnd = new Random(); //Is this bad?
protected int numberOne; //this is bad
protected int numberTwo; //this is bad
protected void Page_Load(object sender, EventArgs e)
{
numberOne = rnd.Next(100);
numberTwo = rnd.Next(100);
}
}
}
ASPX Page:
<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="BadPassing._Default" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Bad Page</title>
</head>
<body>
<form id="form1" runat="server">
<div>
<a href="http://www.google.com/search?q=<%=this.numberOne %>%2B<%=this.numberTwo %>">
Add <%=this.numberOne %> and <%=this.numberTwo %> using google.
</a>
</div>
</form>
</body>
</html>
Ma compréhension est que le numberOne et numberTwo ne sont pas thread-safe, et pourrait causer un comportement incorrect si deux personnes chargées de la page à la le même temps. En outre, si la page comptait sur numberOne et numberTwo pour stocker des valeurs entre les publications, plusieurs utilisateurs simultanés provoqueraient des résultats inattendus.
Est-ce que je comprends pourquoi cette technique est si mauvaise, et si oui, comment refactoriseriez-vous ce code? Sur une note de côté, est-il incorrect de stocker des services sans état au niveau de la page (comme Random) en tant que variables membres de la classe de pages?
Merci. J'ai complètement mal compris le cycle de rendu ASPX. Cela clarifie beaucoup. –