Cela fonctionne, mais est-ce la bonne façon de le faire ???Quelle est la bonne façon de maintenir l'état dans un contrôle de serveur personnalisé?
J'ai un contrôle de serveur personnalisé qui a une boîte [entrée] sur elle. Je veux imiter le TextBox ASP.NET, mais pas complètement. Lorsque la zone de texte est rendue, j'ai un javascript qui permet aux utilisateurs de sélectionner les valeurs qui sont ensuite placées dans cette boîte de saisie.
J'ai une propriété de texte publique sur le contrôle. Dans le get/set j'obtiens/mets le viewstate pour le contrôle - cette partie est facile, mais quand le contrôle est rempli via le javascript, le Text get n'est pas réellement appelé, quelle est la bonne façon de définir cette propriété exposée en utilisant JavaScript (ou même si l'utilisateur tape simplement dans la boîte)?
Editer: Dans l'OnInit, assurez-vous que l'état est maintenu en accédant aux valeurs du formulaire.
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
if (HttpContext.Current.Request.Form["MyInputBoxValue"] != "")
{
ViewState["MyInputBoxValue"]
= HttpContext.Current.Request.Form["MyInputBoxValue"];
}
}
ensuite pour obtenir la valeur réellement en place dans le HtmlTextWrite, je fais ceci:
protected override void RenderContents(HtmlTextWriter output)
{
// There is an input control here and i set its value property
// like this using the Text internal defined.
output.Write("<input value=" + Text + ">.....
}
grâce
Cela a fonctionné comme un champion, en particulier il y a une valeur que je devais régler pour vérifier si l'article était sale: si (! ((IDictionary) _viewstate) .Contains ("CustomValue") || _viewstate.IsItemDirty ("CustomValue")) – schmoopy
Dans votre méthode 'LoadViewState()', vous annulez le paramètre entrant 'state' en l'écrasant avec le retourne la valeur de 'getDefaultState()'. Est-ce intentionnel? –
@ChrisWalsh Non, et en regardant cela 7 ans plus tard, je ne sais pas pourquoi cela serait même là, ou de quelle base de code cela est originaire. J'ai enlevé cette ligne, ce qui semble avoir du sens pour moi maintenant (mais attention, je n'ai pas fait ASP WebForms depuis au moins 5 ans). Merci de l'avoir signalé. – gregmac