Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Persistence des données avec Viewstate

4 réponses
Avatar
Aurel
Bonjour,

je souhaite tout simplement stocker une valeur de type string dans le
viewstate de mon CustomControl et il s'avère qu'après le postback, je perds
ces informations ! le type retourné est null.

C'est déclaré ainsi
public maClass: WebControl{

public string ID{
get{
return (string)ViewState["ID"];
}
set{
ViewState["ID"] = value;
}
}
}

A priori le code est bon, donc dois je activer qqchose que je n'ai pas fait
dans mes options de compilation. Ce contrôle est stocké dans une dll, il y a
t'il un argument à rajouter ?

De plus je souhaitais utiliser le ICallbackEventHandler pour ne pas poster
la page à chaque fois. et je n'arrive pas à récupérer la string de
GetCallbackResult().

ma fonction de retour

function ReceiveData(Value,context) {
alert(Value);
}

[C#]
string GetCallbackResult(string eventArgument){
return "essai";
}

fonctionne (c'est a dire que je vois une boite de dialogue) mais Value est
null alors qu'il ne devrait pas

si quelqu'un à une idée...C'est comme si les données n'étaient pas postées!

Merci

A+

Aurel

4 réponses

Avatar
Patrick Ruzand
Bonjour,

[...]
A priori le code est bon, donc dois je activer qqchose que je n'ai pas
fait dans mes options de compilation. Ce contrôle est stocké dans une dll,
il y a t'il un argument à rajouter ?



rien a rajouter non. Comme ca, la`, je dirai que soit ta page a
EnableViewState
a false, soit c'est la propriete ID qu'il n'aime pas: elle est deja defini
sur Control.
Tu as essaye' avec un autre nom de propriete' ?

De plus je souhaitais utiliser le ICallbackEventHandler pour ne pas poster
la page à chaque fois. et je n'arrive pas à récupérer la string de
GetCallbackResult().



C'est ta Page qui implemente ICallbackEventHandler ?
Appelles-tu bien GetCallbackEventReference (ou ses methodes soeurs) ?
Peux-tu poster un exemple de code ?

Patrick
Avatar
Delf
Aurel a exprimé avec précision :

si quelqu'un à une idée...C'est comme si les données n'étaient pas postées!



Le UserControl est dans le code Html de la page ASPX où est-il créé via
LoadControl() au runtime ?

--
Delf
Avatar
Delf
Delf a formulé la demande :

Le UserControl est dans le code Html de la page ASPX où est-il créé via
LoadControl() au runtime ?



Désolé, j'ai mal lu, il s'agit d'un WebControl :
--
Delf
Avatar
Aurel
Bonjour,

voici mon code

Utilisation de ICallbackEventHandler
[default.aspx]
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs"
Inherits="_Default" EnableSessionState="True" EnableViewState="true" %>
<%@ Register TagPrefix="aspSample" Namespace="CommercialTools.Catalogue"
Assembly="CommercialTools" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
<title>Test</title>
<script type="text/javascript">
function salut(Value)
{
CallServer(Value,"");
}
function ReceiveServerData( rValue , Context )
{
alert( rValue );
}
</script>
</head>
<body>
<form id="form1" runat="server">

<input type="button" onclick="salut('Test')" value="Test"
id="Button1" runat="server" />
<span id="span1" />

<aspSample:Classification ID="Classification1"
EnableViewState="true" runat="server" />
<aspSample:ListeProduits ID="ListeProduits1" EnableViewState="true"
runat="server" />
<!-- Permet de
<asp:LinkButton ID="LinkButton1" runat="server">Postback</asp:LinkButton>
</form>
</body>
</html>

[default.aspx.cs]
public partial class _Default : System.Web.UI.Page, ICallbackEventHandler
{
string data = "";

protected void Page_Load(object sender, EventArgs e)
{
this.Response.Write( DateTime.Now );

if ( !this.IsCallback )
{
string ScriptRef = this.ClientScript.GetCallbackEventReference(
this ,
"document.forms[0].Button1.value" ,
"ReceiveServerData" ,
"this" ,
"ReceiveServerData" ,
true );
this.Button1.Attributes.Add( "onclick" , ScriptRef );
}
}

void ICallbackEventHandler.RaiseCallbackEvent(String eventArgument)
{
this.data = eventArgument;
}

String ICallbackEventHandler.GetCallbackResult(){
return "***************************Essai de
ICallbackEventHandlerrneventArgument: " + data
+"rn Il est: " + DateTime.Now;

/*Cette écriture retourne
* ------------------------------------------
* Essai de ICallbackEventHandler
* eventArgument: Test
* Il est: 27/11/07 00:00:00
* -------------------------------------------
* les 27 premières étoiles sont supprimées !!!
*/
}
}


Utilisation du Viewstate
[ListeProduits.cs]

[ToolboxData( "<{0}:ListeProduits runat=server></{0}:ListeProduits>" )]
[ViewStateModeById()] // Aucun changement avec ou sans cet attribut
public class ListeProduits : WebControl, INamingContainer
{
Données données;
private ProduitCollection _Produits;

protected override void OnInit ( EventArgs e )
{
// Initialisation
données = new Données();
_Produits = new ProduitCollection();


//Selection de la classe en cours
if ( this.Context.Request.Form["__EVENTTARGET"] ==
"Classification1" )
{
string[] _value =
this.Context.Request.Form["__EVENTARGUMENT"].Split( char.Parse( @"" ) );
CurrentClasse = _value[_value.Length - 1].Replace( "s" ,
"" ).Replace("t",""); ;
}

//Test de la classe, je réalise un postback neutre avec le linkbutton
de la page default.aspx
this.Page.Response.Write( CurrentClasse );
// Ne retourne rien il le __EVENTTARGET n'est pas Classification1 or
cela devrait être enregistrer

//Création des contrôles enfants
LoadProduits( CurrentClasse );

base.OnInit( e );
}

[Localizable( true )]
[Bindable(true)]
public string CurrentClasse
{
get
{
return (string)ViewState["CurrentClasse"];
}
set
{
ViewState["CurrentClasse"] = value;
}
}


public ProduitCollection Produits
{
get
{
return _Produits;
}
set
{
_Produits = value;
}
}

protected void LoadProduits ( string SelectedClasse )
{
//Création des contrôles enfants
//...
}

protected override void CreateChildControls ()
{
if ( Produits.Count > 0 )
{
foreach ( Produit p in Produits )
{
this.Controls.Add( p );
}
}
base.CreateChildControls();
}

protected override void Render ( HtmlTextWriter output )
{
base.Render( output );
}

}


Toujours pas d'évolution au niveau du ViewState, je n'arrive pas à le
récupérer. Par contre pour le ICallbackEventHandler, j'ai les
27 premiers caractères qui sont supprimés ! Un peu étonnant...

Donc je tourne en rond...

Le site est hébergé en local, il n'est pas déclaré dans les Services
Internet IIS, c'est Visual Studio 2005 qui crée une sorte de serveur
temporaire associé à un port. Du coup, je n'ai pas accés au propriétés du
site.
Je vais essayer de déclarer le répertoire comme un site web...

Sinon une idée serait la bienvenue... ;)

Merci

A+

Aurel


"Delf" a écrit dans le message de news:

Delf a formulé la demande :

Le UserControl est dans le code Html de la page ASPX où est-il créé via
LoadControl() au runtime ?



Désolé, j'ai mal lu, il s'agit d'un WebControl : >
--
Delf