Comment inclure un fichier ?

bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008 - 7 août 2004 à 18:33
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 8 août 2004 à 11:54
Bonjour,

Actuellement, j'ai développé mon site BonneBouffe.org en Coldfusion.

J'ai décidé de le réécrie en ASP.Net (C#) et je suis confronté à un bête problème (je suis débutant dans ce langage) : comment dois-je faire pour inclure une page dans une autre ?

Actuellement, j'utilise une seule page (index.cfm) dans laquelle je fais passer via l'url une page que je veux inclure (j'utilise le tag <CFINCLUDE ...>).

Quel est l'équivalent en C# ?

Merci d'avance, je suis un peu perdu :I

Christophe

16 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 août 2004 à 21:09
En asp.net, il est recommandé de ne pas inclure des pages.
Asp.net à pour cela concu un autre outil : les usercontrol.

qu'est-ce qu'un UserControl (UC), c'est la meme chose qu'une page, sauf qu'a la difference qu'au lieu d'avoir dans ta directive <%@ Page ... tu auras <%@ Control ... et au lieu de dériver de Page tu deriveras de usercontrol, mais sinon tu peux faire exactement la meme chose.

Les UC sont donc des fichiers comme des pages aspx, leur extension est cependant differente, ce sont des fichiers ascx, c'est la seule difference qu'il y a

Tu peux Ensuite inclure ton UC dans ta page comme n'importe quelle controle par exemple : il faut juste le declarer au dessous de la directive page : <%@ Register TagPrefix="ACME" tagname="MONUC" Src="MonFichier.ascx" %>

Les UC se comportent de la meme facon que les autres controls ont peut donc leur rajouter des propriétés, interagir avec eux à partir de la page, leur rajouter des evenements, ils sont donc tres puissant, et c'est pour ca que je te les conseils.

Tu as aussi une autre méthode en asp.net qui est hérité d'asp, c'est la méthode include, je connais cette méthode juste de nom, et je pense qu'elle est a oublié, vu ses faibles capacités, mais je suppose que ca ressemble à <CFINCLUDE> je connais pas Coldfusion.

J'espere t'avoir repondu, il doit surement y avoir des exemples d'UserControl sur ce site et j'ai déjà repondu à pas mal de personne dans le forum à ce sujet, si tu n'as pas tout à fait compris, tu n'as qu'a me le dire, je ferais un exemple plus parlant :)

@+

Cyril
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 août 2004 à 22:31
Voici ce que tu m'as ecrit en message privé :

Merci bcp pour ta réponse sur le forum mais j'ai peur de ne pas comprendre ! :-)

Saurais-tu me faire un petit exemple ?

1 page principale (qui sera utilisée tout le temps) et une seconde page qui sera appellée en fonction d'une variable passée par l'url.

Merci d'avance,

Christophe

PS : je suis complètement paumé :-)

en asp.net on fait plutot le contraire, on fait plutot une page avec ce que l'on veut dedans, et par exemple un Usercontrol menu

voici ici : un exemple d'UserControl menu pour mon site que je suis en train de finaliser :
http://www.aspfr.com/forum.v2.aspx?ID=262942&nb=10

je suis allé voir ton site, et je pensais faire un UserControl, qui prendrait en paramètre un objet Recette, et le reste du control se remplirait automatiquement

J'ai fait ca pour mon site, et pour les differents vins que j'ai :)
Je regarde si je peux te poster ca, et je te redit

@+

Cyril
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
7 août 2004 à 22:40
Merci beaucoup, je vais aller lire calmement ton explication ! :)

Christophe
Une petite faim ? RDV sur BonneBouffe.org
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 août 2004 à 23:10
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
7 août 2004 à 23:15
Ci dessus, une source que j'ai posté pour te montrer ce que tu pourrais faire avec tes recettes, tu n'auras plus qu'une page te gerant les recettes, et apres tu peux appeller ce UserControl avec en paramètre l'objet Recette.
et tu pourras faire encore plus, tu pourras rechercher une recette par popularité, par note, difficulté etc... d'une facilité deconcertante, tu pourras faire tout cela en qq lignes.

Je te conseil un bouquin pas cher, qui m'a appris bcp de choses http://www.aspfr.com/livres.aspx?id=5

c'est le premier bouquin que j'ai eu, et je m'en sers encore tres souvent

@+

Cyril
0
cs_fabrice69 Messages postés 1765 Date d'inscription jeudi 12 octobre 2000 Statut Membre Dernière intervention 11 décembre 2013 5
7 août 2004 à 23:58
Tiens bonne bouffe (j'étais sur ce site encore hier :) sympa d'ailleurs).
Bref ce n'est pas le sujet.

Pour tes débuts en .NET (C# ou VB.NET la logique est la même), je te conseille de regarder les tutoriaux ici :
- http://www.asp-php.net/tutorial/asp.net/index.php?page=2

Pour ton problème particulier, tu as plusieurs solutions :

* si ton site par exemple possède des page HTML que tu ne souhaites pas réécrire mais juste afficher dans ton site .NET tu peux utiliser un User Control (en appelant le custom Web control) qui va ouvrir les fichiers HTML et les recracher (le flux texte) dans ta page en cours, pour ca regarde ici :
- http://www.asp-php.net/tutorial/asp.net/customwebcontrol.php

Si tes recettes sont en base et que tu dois faire un 'modèle' que tu vas ajouter dans ta page en cours, il faut construire un User control (comme te l'a expliqué jesusonline) qui va récupérer les information et les ajouter dans le composant. Tu as un exemple ici :
- http://www.asp-php.net/tutorial/asp.net/urlrolloverinfo.php

Avec ca tu auras déja une bonne base pour avancer dans ton développement.

Romelard Fabrice (Alias F___)
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 08:39
Bonjour fabrice69,

Merci pour ton aide ...

En fait, tout est sotcké dans une DB ...

Je vais voir les différents et le bouqin conseillé par jesusonline ...

En tout cas, je trouve que la prise en main de .Net est qd même moins évidente que Coldfusion :-)

Christophe
Une petite faim ? RDV sur BonneBouffe.org
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 08:56
Je pense avoir + ou - avoir compris le principe mais je cale sur un bête truc ...

Comment faire pour lui donner dynamiquement la page à "appeler" ?

Qd j'exécute ma page, il donne le msg d'erreur : "Object reference not set to an instance of an object"

using System;
using System.Collections;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Web;
using System.Web.SessionState;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.HtmlControls;

namespace bnnet
{
/// <summary>
/// Summary description for WebForm1.
/// </summary>
public class index : System.Web.UI.Page
{
UserControl monuc;

private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["pg"] == "")
{
monuc.LoadControl("main.ascx");
} else {
string lapg = Request.QueryString["pg"] + ".ascx";
monuc.ResolveUrl(lapg);
}
}

#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.Load += new System.EventHandler(this.Page_Load);

}
#endregion
}
}
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 08:58
J'essaie différentes choses mais je n'ai pas encore trouvé celle qui fonctionne ...

monuc.ResolveUrl ne donne rien ... (ce n'est sûrement pas la bonne "option").
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 août 2004 à 10:25
Qd tu as l'erreur : "Object reference not set to an instance of an object" ca veut dire que tu n'as pas instancié ton objet, dans la plupart des cas tu as oublié de mettre un new ce qui est le cas.

public class index : System.Web.UI.Page
{
UserControl monuc;

private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["pg"] == "")
{
monuc = new UserControl
monuc.LoadControl("main.ascx");
} else {
string lapg = Request.QueryString["pg"] + ".ascx";
monuc.ResolveUrl(lapg);
}
}

Ton code peut marcher, mais dans ce cas monUc est de type UserControl alors que ca ne devrait pas etre le cas.

le code de ton ascx.vb doit ressembler à ca

Public Class Vin : System.Web.UI.UserControl

au lieu de déclarer monuc en UserControl déclare le en Vin.

ca peut fonctionner avec UserControl, mais tu n'auras pas accés aux propriétés que tu rajouteras

@+

Cyril
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 10:34
Merci pour ton aide !

Je ne pige PLUS RIEN :-(( J'ai comme l'impression que je suis en train de passer pour un con fini ;-)

AHHH :-)

Christophe
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 août 2004 à 10:45
lol

si tu comprend pas grand chose, ca me parait normal, car c'est pas un des concepts les plus faciles d'asp.net
Dans le bouquin que je t'ai conseillé, il en parle au chapitre "Un peu plus loin" donc ne t'en fait pas si tu comprends rien, ca va venir petit à petit :)

mais ca marche ?

Tu veux que je t'explique quelque chose ou reexplique ?

Cyril
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 10:58
J'irai voir après ce bouquin la semaine prochaine.

Concernant ton exemple, il est trop complexe (pour un 1ère fois).

Note que une fois que ça a fait tilte dans ma tête, ça va mieux pour la suite mais là, je coince.

Ton explication est claire mais je n'arrive pas à la reproduire dans mon code.

Je suis toujours aussi perdu :-(

Désolé de parraître si lourd mais y a un p'tit kék chose qui ne se déclanche pas bien dans ma tête :-)
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 août 2004 à 11:05
lol montre moi le code de ta page, et le code de UserControl

je vais te dire ce qui va pas :)

C'est vrai que si t'as pas l'habitude de travailler avec le framework .net et peut etre meme pas en objet ca doit te paraitre incomprehensible :)

Cyril
0
bonnebouffe Messages postés 38 Date d'inscription lundi 15 septembre 2003 Statut Membre Dernière intervention 24 novembre 2008
8 août 2004 à 11:46
En fait, j'en suis resté à l'exemple que j'avais mis un peu plus haut, je ne comprends pas comment je dois faire, désolé :-((((

Ca me fait râler de bloquer sur des "conneries" comme ça :-(
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
8 août 2004 à 11:54
Deja rajoutes cette ligne
monuc = new UserControl;

ici :

public class index : System.Web.UI.Page
{
UserControl monuc;

private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["pg"] == "")
{
monuc = new UserControl;
monuc.LoadControl("main.ascx");
} else {
string lapg = Request.QueryString["pg"] + ".ascx";
monuc.LoadControl(lapg);
}
}

Je sais pas si ca va marcher, ca devrait marcher, mais tu n'exploites pas toutes les possibilités des UC.
Je pense que tu as du faire un Fichier de code pour ton UC un fichier ascx.vb, si c'est pas le cas, le code si dessus suffit.

Sinon dans ton fichier ascx.vb tu as une classe qui doit hériter de UserControl
Par exemple :
Public Class Vin : System.Web.UI.UserControl
{
}

et c'est le nom de cette classe qu'il faut que tu charge le code devient donc :

public class index : System.Web.UI.Page
{
Vin monuc;

private void Page_Load(object sender, System.EventArgs e)
{
if (Request.QueryString["pg"] == "")
{
monuc = new Vin;
monuc.LoadControl("main.ascx");
} else {
string lapg = Request.QueryString["pg"] + ".ascx";
monuc.LoadControl(lapg);
}
}

J'espere t'avoir aidé, c'est vrai que c'est pas evident, surtout si tu ne connais pas la notion d'objet

Cyril
0
Rejoignez-nous