Probeleme d'héritage

Résolu
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009 - 5 août 2005 à 13:16
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 - 5 août 2005 à 18:49
J'ai un problème d'héritage :
En fait pour mon site il me faut un systeme de login. Chaque page devra etre accessible suivant le niveau d'authentification. Pour faire ca j'ai créé une classe "Page_Standard" qui herite de System.Web.UI.Page. J'y ai donc rajouter les attributs qu'il me fallait etc. Ensuite j'ai surchargé la procédure OnLoad dans laquelle j'ai mis mon algorithme d'authentification.
Et pour faire marcher le tout, ma page web, qui sera affichée, herite non plus de System.Web.UI.Page mais de Page_Standard...
Voilà le code :

Public Class ajouter_commercial
Inherits Page_Standard

#Region " Code généré par le Concepteur Web Form "
.
.
.
Private Sub Load(...) MyBase.Load
...
Response.write(msgbox("Coucou"))
End sub
Et la classe de base :

Public Class Page_Standard
Inherits System.Web.UI.Page
...
Protected Overloads Overrides Sub OnLoad(ByVal e As System.EventArgs)
.
.
.
End Sub
End Class

Le système d'authentification marche tres bien : l'utilisateur se voit rejeté en cas d'accès à une page non autorisée. Le probleme, c'est que la procédure Form_Load de ma classe hérité n'est pas executée (On ne voit aucun message "Coucou")
D'ou vient le pb ?

3 réponses

jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
5 août 2005 à 14:33
en fait : regarde le code que tu as mis :

Private Sub Load(...) MyBase.Load
...
Response.write(msgbox("Coucou"))
End sub

je pense qu'il doit te faire une erreur comme quoi msgbox is not a function ? ;)

response.write("coucou") serait mieux ! voir meme label1.text = "coucou" ou alors mettre un point d'arret sur le page_load ... :)

par contre j'ai des doutes sur ta facon de faire :-/ pourquoi n'utilises tu pas le web.config pour ton systeme d'authentification ? (c'est pas un reproche, ca peut etre utile de pas l'utiliser :p) et ausis pourquoi met tu le code dans le load de la page ? et pourquoi overrides tu l'evenement onload (d'ailleur j'espere que t'as pas oublié le mybase.onload(e) ? )

moi je ferais

public class PageStandard
inherits page

protected sub page_init(sender as object, e as eventargs) handles mybase.init
'ici le traitement d'authentication
if user "toto" pass "1234" then
isauth = true
else
response.redirect("error.aspx", true)
end if

end sub

end class

<hr> Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
3
Horfee Messages postés 188 Date d'inscription mercredi 9 avril 2003 Statut Membre Dernière intervention 10 août 2009
5 août 2005 à 16:26
lol
Merci d'avoir pris la peine de me répondre.
En fait j'ai trouvé d'ou venait le problème : je surchargais le mauvais ...truc ! En fait il fallait simplement que je surcharge la procédure associée à l'evennement, et non la surcharge de la pricédure de base.
Pour le truc msgbox, c'est en fait une fonction. Je pens eque tu dois en avoir une equivalente, mais je te la donne quand meme :


' génére le minimum pour faire apparaitre un message (MsgBox) popup en javascript
' place le message msg comme message du popup et replace tout les "'" pour ne pas générer d'erreurs
' si letOpened egale true le bloc "script" reste ouvert pour ne pas a avoir a rajouter un entete
' si redirect<>"" alors la page sera automatiquement redirigé vers l'url "redirect"
Public Function MsgBox(ByVal msg As String, Optional ByVal Redirect As String "", Optional ByVal letOpened As Boolean False) As String
Dim str As String = msg.Replace("'", "\'")
str = "<script language=""javascript"">alert('" & str & "');" & vbCrLf
If Redirect <> "" Then str &= "document.location='" & Redirect & "';"
If Not letOpened Then str &= "</script>"
Return str
End Function

Ensuite, pour le web.config j'ai vu que s'était possible, et j'avais essayé mais j'ai jamais reussi a le faire fonctionner. Pourquoi je ne sais pas donc bon...
Pourquoi dans le Load ? parce que ce traitement doit etre fait avant le chargement de la page non ? Y a t il d'autre solution ? plus jolies (je pense que le web.config doit etre mieux...)? Où le mettre sinon dans le Load et mis a part le Page_Init ? ( je fait l'authentification biensur a partir d'une Base De Donnees)
Sincèrement j'aurais bien voulu l'utiliser le web.config...aurais tu une source sur le sujet ? Mais bon j'ai pas trop chercher parce que cette solution fonctionne et je suis bloqué au niveau du timing donc j'avais commencé comme ca...
0
jesusonline Messages postés 6814 Date d'inscription dimanche 15 décembre 2002 Statut Membre Dernière intervention 13 octobre 2010 29
5 août 2005 à 18:49
en fait, tout depend de ce que t'as besoin.

Mais l'evenement init me semble plus aproprié, ca t'evitera de bouffer des ressources inutilement.

Sinon pour l'authentication par web.config, j'ai malheureusement pas le temps de t'expliquer :(

mais cette solution est pas mal non plus :)


<HR>
Cyril - MCP ASP.net
Webmaster de : Hoshimi.CodeS-SourceS.fr
0