Définition de l'état d'affichage lors de la publication
Question
J'essaie de définir une variable ViewState lorsqu'un bouton est enfoncé, mais cela ne fonctionne que la deuxième fois que je clique sur le bouton.Voici le code-behind :
protected void Page_Load(object sender, EventArgs e)
{
if (Page.IsPostBack)
{
lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
}
}
private string YourName
{
get { return (string)ViewState["YourName"]; }
set { ViewState["YourName"] = value; }
}
protected void btnSubmit_Click(object sender, EventArgs e)
{
YourName = txtName.Text;
}
Y a-t-il quelque chose qui me manque ?Voici la partie du fichier de conception, très basique tout comme un POC:
<form id="form1" runat="server">
<div>
Enter your name: <asp:TextBox runat="server" ID="txtName"></asp:TextBox>
<asp:Button runat="server" ID="btnSubmit" Text="OK" onclick="btnSubmit_Click" />
<hr />
<label id="lblInfo" runat="server"></label>
</div>
</form>
PS : L'exemple est très simplifié, "utilisez txtName.Text
au lieu de ViewState" n'est pas la bonne réponse, j'ai besoin que les informations soient dans ViewState.
La solution
Page_Load
incendies avant btnSubmit_Click
.
Si vous souhaitez faire quelque chose après le déclenchement de vos événements de publication, utilisez Page_PreRender
.
//this will work because YourName has now been set by the click event
protected void Page_PreRender(object sender, EventArgs e)
{
if (Page.IsPostBack)
lblInfo.InnerText = String.Format("Hello {0} at {1}!", YourName, DateTime.Now.ToLongTimeString());
}
L'ordre de base est le suivant :
- L'initialisation de la page se déclenche (l'initialisation ne peut pas accéder à ViewState)
- ViewState est lu
- Incendies de chargement de page
- Tous les événements se déclenchent
- Déclenchements de pré-rendu
- Rendus de pages
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow