OVH Cloud OVH Cloud

User control

7 réponses
Avatar
uc
Bonjour,

Je souhaite créer un User Control dans mon appli.
Il comporte plusieurs boutons, auxquels la page qui les contient
associe une URL (une à chacun), et je souhaite que quand on clique sur
les boutons, ils redirigent la page vers l'URL demandée.

Question : Où placer les méthodes OnClick() de chaque bouton (qui
contiennet le Response.Redirect) ? J'ai des messages d'erreur qui me
disent que mes instances d'objets sont ) NULL, et je ne comprend pas
bien pourquoi ...

Merci

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net

7 réponses

Avatar
Frédéric Queudret [MS]
Bonjour,

Pouvez-vous mettre votre code (l'ensemble y compris l'initialisation)?
Sinon autre possibilité: plutôt que de gérer le response.redirect sur le
click du bouton, vous pouvez générer le javascript correspondant à la
navigation, cela vous évite1 aller/retour avec le serveur.
Frédéric.

wrote in message news:
Bonjour,

Je souhaite créer un User Control dans mon appli.
Il comporte plusieurs boutons, auxquels la page qui les contient associe
une URL (une à chacun), et je souhaite que quand on clique sur les
boutons, ils redirigent la page vers l'URL demandée.

Question : Où placer les méthodes OnClick() de chaque bouton (qui
contiennet le Response.Redirect) ? J'ai des messages d'erreur qui me
disent que mes instances d'objets sont ) NULL, et je ne comprend pas bien
pourquoi ...

Merci

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
ByB
Frédéric Queudret [MS] a émis l'idée suivante :
Bonjour,

Pouvez-vous mettre votre code (l'ensemble y compris l'initialisation)?
Sinon autre possibilité: plutôt que de gérer le response.redirect sur le
click du bouton, vous pouvez générer le javascript correspondant à la
navigation, cela vous évite1 aller/retour avec le serveur.
Frédéric.



Code du User Control :

using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for MenuBoutons.
/// </summary>
public class MenuBoutons : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button Bout1;
protected System.Web.UI.WebControls.Button Bout2;
protected System.Web.UI.WebControls.Button Bout3;
protected System.Web.UI.WebControls.Button Bout4;
public string url1, url2, url3, url4;

private void Page_Load(object sender, System.EventArgs e)
{
Bout1.Click +=new EventHandler(Bout1_Click);
Bout2.Click += new EventHandler(Bout2_Click);
Bout3.Click +=new EventHandler(Bout3_Click);
Bout4.Click +=new EventHandler(Bout4_Click);
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Bout1.Click += new System.EventHandler(this.Bout1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Bout1_Click(object sender, EventArgs e)
{
Response.Redirect(url1);
}

private void Bout2_Click(object sender, EventArgs e)
{
Response.Redirect(url2);
}

private void Bout3_Click(object sender, EventArgs e)
{
Response.Redirect(url3);
}

private void Bout4_Click(object sender, EventArgs e)
{
Response.Redirect(url4);
}


}

et dans la page ASP, je déclare mon control avec :

<%@ Register TagPrefix="mb1" TagName="MenuBoutons"
Src="MenuBoutons.ascx" %>

et dans le Page_Load, je fais :

mb1.url1 = "mon url";
mb1.url2 = "mon url2"

etc.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
uc
Frédéric Queudret [MS] avait énoncé :
Bonjour,

Pouvez-vous mettre votre code (l'ensemble y compris l'initialisation)?
Sinon autre possibilité: plutôt que de gérer le response.redirect sur le
click du bouton, vous pouvez générer le javascript correspondant à la
navigation, cela vous évite1 aller/retour avec le serveur.
Frédéric.



Code du User Control :

using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for MenuBoutons.
/// </summary>
public class MenuBoutons : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button Bout1;
protected System.Web.UI.WebControls.Button Bout2;
protected System.Web.UI.WebControls.Button Bout3;
protected System.Web.UI.WebControls.Button Bout4;
public string url1, url2, url3, url4;

private void Page_Load(object sender, System.EventArgs e)
{
Bout1.Click +=new EventHandler(Bout1_Click);
Bout2.Click += new EventHandler(Bout2_Click);
Bout3.Click +=new EventHandler(Bout3_Click);
Bout4.Click +=new EventHandler(Bout4_Click);
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form
Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Bout1.Click += new
System.EventHandler(this.Bout1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Bout1_Click(object sender, EventArgs e)
{
Response.Redirect(url1);
}

private void Bout2_Click(object sender, EventArgs e)
{
Response.Redirect(url2);
}

private void Bout3_Click(object sender, EventArgs e)
{
Response.Redirect(url3);
}

private void Bout4_Click(object sender, EventArgs e)
{
Response.Redirect(url4);
}


}

et dans la page ASP, je déclare mon control avec :

<%@ Register TagPrefix="mb1" TagName="MenuBoutons"
Src="MenuBoutons.ascx" %>

et dans le Page_Load, je fais :

mb1.url1 = "mon url";
mb1.url2 = "mon url2"

etc.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Frédéric Queudret [MS]
il se pourrait le nom du control (Id) donné dans le code ASPX (côté HTML) ne
correspond pas au nom de la variable membre équivalente côté code-behind
(c#).
Pouvez vous fournir le code de la page utilisant le contrôle (à la fois
l'ASPX et le code-behind).
Merci,
Frédéric.

wrote in message news:
Frédéric Queudret [MS] avait énoncé :
Bonjour,

Pouvez-vous mettre votre code (l'ensemble y compris l'initialisation)?
Sinon autre possibilité: plutôt que de gérer le response.redirect sur le
click du bouton, vous pouvez générer le javascript correspondant à la
navigation, cela vous évite1 aller/retour avec le serveur.
Frédéric.



Code du User Control :

using System;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

/// <summary>
/// Summary description for MenuBoutons.
/// </summary>
public class MenuBoutons : System.Web.UI.UserControl
{
protected System.Web.UI.WebControls.Button Bout1;
protected System.Web.UI.WebControls.Button Bout2;
protected System.Web.UI.WebControls.Button Bout3;
protected System.Web.UI.WebControls.Button Bout4;
public string url1, url2, url3, url4;

private void Page_Load(object sender, System.EventArgs e)
{
Bout1.Click +=new EventHandler(Bout1_Click);
Bout2.Click += new EventHandler(Bout2_Click);
Bout3.Click +=new EventHandler(Bout3_Click);
Bout4.Click +=new EventHandler(Bout4_Click);
}

#region Web Form Designer generated code
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: This call is required by the ASP.NET Web Form
Designer.
//
InitializeComponent();
base.OnInit(e);
}

/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InitializeComponent()
{
this.Bout1.Click += new System.EventHandler(this.Bout1_Click);
this.Load += new System.EventHandler(this.Page_Load);

}
#endregion

private void Bout1_Click(object sender, EventArgs e)
{
Response.Redirect(url1);
}

private void Bout2_Click(object sender, EventArgs e)
{
Response.Redirect(url2);
}

private void Bout3_Click(object sender, EventArgs e)
{
Response.Redirect(url3);
}

private void Bout4_Click(object sender, EventArgs e)
{
Response.Redirect(url4);
}


}

et dans la page ASP, je déclare mon control avec :

<%@ Register TagPrefix="mb1" TagName="MenuBoutons" Src="MenuBoutons.ascx"
%>

et dans le Page_Load, je fais :

mb1.url1 = "mon url";
mb1.url2 = "mon url2"

etc.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
ByB
Frédéric Queudret [MS] a exposé le 14/02/2005 :
il se pourrait le nom du control (Id) donné dans le code ASPX (côté HTML) ne
correspond pas au nom de la variable membre équivalente côté code-behind
(c#).
Pouvez vous fournir le code de la page utilisant le contrôle (à la fois
l'ASPX et le code-behind).
Merci,
Frédéric.





Code HTML :
En tête de la page :
<%@ Register TagPrefix="mb1" TagName="MenuBoutons"
Src="MenuBoutons.ascx" %>

Dans le formulaire :
<mb1:MenuBoutons id="mb1" runat="server"></mb1:MenuBoutons>

Code Behind :

Dans le PageLoad :

if (!IsPostBack)
{
mb1.url1 = "aaa.aspx";
mb1.url2 = "bbb.aspx";
mb1.url3 = "ccc.aspx";
mb1.url4 = "ddd.aspx";
}



Merci.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net
Avatar
Frédéric Queudret [MS]
Le problème vient du fait que vous testez !Page.IsPostBack.
Or vous voulez naviguer sur un événement Click.
Donc lors du retour côté serveur, url1, url2, etc. sont à nulles puisque
vous ne les réaffectez pas.
Si vous souhaitez les conserver, utilisez le ViewState dans votre
UserControl pour les stocker et les recharger.
Pour tester que le problème vient bien de là, retirer le test
!Page.IsPostBack.

Frédéric.

"ByB" wrote in message
news:
Frédéric Queudret [MS] a exposé le 14/02/2005 :
il se pourrait le nom du control (Id) donné dans le code ASPX (côté HTML)
ne correspond pas au nom de la variable membre équivalente côté
code-behind (c#).
Pouvez vous fournir le code de la page utilisant le contrôle (à la fois
l'ASPX et le code-behind).
Merci,
Frédéric.





Code HTML :
En tête de la page :
<%@ Register TagPrefix="mb1" TagName="MenuBoutons" Src="MenuBoutons.ascx"
%>

Dans le formulaire :
<mb1:MenuBoutons id="mb1" runat="server"></mb1:MenuBoutons>

Code Behind :

Dans le PageLoad :

if (!IsPostBack)
{
mb1.url1 = "aaa.aspx";
mb1.url2 = "bbb.aspx";
mb1.url3 = "ccc.aspx";
mb1.url4 = "ddd.aspx";
}



Merci.

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net



Avatar
ByB
Frédéric Queudret [MS] a formulé ce lundi :
Le problème vient du fait que vous testez !Page.IsPostBack.
Or vous voulez naviguer sur un événement Click.
Donc lors du retour côté serveur, url1, url2, etc. sont à nulles puisque vous
ne les réaffectez pas.
Si vous souhaitez les conserver, utilisez le ViewState dans votre UserControl
pour les stocker et les recharger.
Pour tester que le problème vient bien de là, retirer le test
!Page.IsPostBack.

Frédéric.



Effectivement, ça marche !
Merci beaucoup !

--
Ceci est une signature automatique de MesNews.
Site : http://www.mesnews.net