WEB SKIN : CRÉEZ UNE INTERFACE ASPNET POUR VOTRE CLIENT LOURD DOTNET SANS IIS. H

godvicien
Messages postés
36
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
6 avril 2014
- 7 mai 2008 à 11:50
cs_Warny
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015
- 2 déc. 2008 à 22:27
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/46581-web-skin-creez-une-interface-aspnet-pour-votre-client-lourd-dotnet-sans-iis-hebergement-interne-de-webapp

cs_Warny
Messages postés
473
Date d'inscription
mercredi 7 août 2002
Statut
Membre
Dernière intervention
10 juin 2015

2 déc. 2008 à 22:27
Non, bien sûr. Le protocole http se déconnecte de son serveur dès que la page a fini d'être téléchargée (ce n'est pas tout à fait vrai mais rien ne transite du serveur vers le client sans demande du client) et il n'existe aucune commande http pour fermer un navigateur distant.
lamzilichakib
Messages postés
1
Date d'inscription
mardi 9 janvier 2007
Statut
Membre
Dernière intervention
2 décembre 2008

2 déc. 2008 à 19:12
Est ce que l'application peut ferme l’IE lors de stop?

//disable stop
this.btnStopServer.Enabled = false;
//close page
_ServerASPNET.CloseBrowserOnWebApp();
//stop the server
_ServerASPNET.StopThread_ServerASPNET();
//enable start
this.btnStartServer.Enabled = true;
godvicien
Messages postés
36
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
6 avril 2014

17 mai 2008 à 18:28
Voici le code correctif qu'il faut ajouter ? chaque page aspx qui utilise des controls avec AutoPostBack,
a mettre dans le code-behind de la page :

/// <summary>
/// Override: nothing.
/// </summary>
///

public override void VerifyRenderingInServerForm(Control control)
{
//nothing
}
/// <summary>
/// Override: call Render_WithAutoPostBack().
/// </summary>
///

protected override void Render(HtmlTextWriter htmlWriterResponse)
{
this.Render_WithAutoPostBack(htmlWriterResponse);

}
/// <summary>
/// Render the html of the page with AutoPostBack events.
/// </summary>
///

protected void Render_WithAutoPostBack(HtmlTextWriter htmlWriterResponse)
{
//TODO: update the list of YOUR controls that have the AutoPostBack properties
Control[] controlsWithAutoPostBack =
new Control[] { this.ddlSemanticLangs };

//make a new htmlTextWriter on a stringWriter
StringWriter stringWriter = new StringWriter();
HtmlTextWriter htmlTextWriter = new HtmlTextWriter(stringWriter);
//render the page
base.Render(htmlTextWriter);
htmlTextWriter.Flush();
string html = stringWriter.ToString();

//add inputs hidden for AutoPostBack function
html = html.Replace("\n" +
"\n" +
//"\n" +
"<script type="text/javascript">\n" +
" var theForm = document.forms['aspnetForm'];\n" +
" if (!theForm) {\n" +
" theForm = document.aspnetForm;\n" +
" }\n" +
"function __doPostBack(eventTarget, eventArgument) {\n" +
" if (!theForm.onsubmit || (theForm.onsubmit() != false)) {\n" +
" theForm.__EVENTTARGET.value = eventTarget;\n" +
" theForm.__EVENTARGUMENT.value = eventArgument;\n" +
" theForm.submit();\n" +
" }\n" +
"}\n" +
"</script>\n" +
"<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE");

//loop to treat each control with AutoPostBack
foreach (Control control in controlsWithAutoPostBack)
{
//get render of the control
StringWriter strWriter = new StringWriter();
HtmlTextWriter htmlWriter = new HtmlTextWriter(strWriter);
control.RenderControl(htmlWriter);
htmlWriter.Flush();
string htmlControl = strWriter.ToString();
//get id of the control
XmlDocument xmlControl = new XmlDocument();
xmlControl.LoadXml(htmlControl);
string idControl = "id="" + xmlControl.DocumentElement.Attributes["id"].Value + """;
//build onchange function
string onchange = "onchange="javascript:setTimeout('" + this.GetPostBackEventReference(control).Replace("'", "\\'") + "', 0)"";
//affect in html
html = html.Replace(idControl, idControl + " " + onchange);

}//next control

//write html in the response
htmlWriterResponse.WriteLine(html);

}

Comme vous pouvez le voir il suffit de mettre a jour la liste des controls qui utilisent le AutoPostBack au d?but de la fonction Render_WithAutoPostBack().
godvicien
Messages postés
36
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
6 avril 2014

17 mai 2008 à 13:29
Je viens de d?couvrir un gros bug : ce system ne g?n?re pas le code 'AutoPostBack' des controls serveur ASP.

Pourquoi ? Myst?re ...
godvicien
Messages postés
36
Date d'inscription
dimanche 23 janvier 2005
Statut
Membre
Dernière intervention
6 avril 2014

16 mai 2008 à 08:08
MAJ V4:

J'ai ajouté quelques fonctionnalités indispensables :
- Gestion des sous-repertoires de la WebApp (dont App_GlobalRessources)
- Gestion des fichiers Non-ASP (images, css, html)

A part ca j'ai découvert que l'on pouvait débuguer la WebApp avec ce server comme pour une WebApp sous IIS.
C'est magique, il suffit d'inserer un point d'arret dans une page web.
Afficher les 13 commentaires