The suggested solution is as follows.
First we will define a dictionary which can hold string key value pairs. We will also provide methods for storing and retrieving these values.
private string _KeyStoreName = "__KeyValueStore__";
private Dictionary<string, string> _KeyValues = new Dictionary<string, string>();
public void SetKeyValue(string name, string value)
{
if (_KeyValues.ContainsKey(name))
_KeyValues[name] = value;
else
_KeyValues.Add(name, value);
}
public string GetValue(string name)
{
if (_KeyValues.ContainsKey(name))
return _KeyValues[name];
return "";
}
public Dictionary<string, string> GetKeyValues()
{
Dictionary<string, string> keyVals = new Dictionary<string, string>();
foreach (string key in _KeyValues.Keys)
keyVals.Add(key, _KeyValues[key]);
return keyVals;
}On pre-render, we will serialize the dictionary and encrypt it. This value will be stored in a hidden field which will be generated dynamically.
protected override void OnPreRender(EventArgs e)
{
StringWriter sw = new StringWriter();
los.Serialize(sw, _KeyValues);
string valueToStore = sw.GetStringBuilder().ToString();
// Encrypt valueToStore to make it secured.
HtmlInputHidden hid = new HtmlInputHidden();
hid.ID = _KeyStoreName;
hid.Name = _KeyStoreName;
hid.Value = valueToStore;
Page.Form.Controls.Add(hid);
base.OnPreRender(e);
}On pre-init, we will retrieve the hidden field value, decrypt it and deserialize it.
protected override void OnPreInit(EventArgs e)
{
string storedValue = Request.Form[_KeyStoreName];
if (!string.IsNullOrEmpty(storedValue))
{
// Decrypt storedValue, if you have encrypted it.
LosFormatter los = new LosFormatter();
_KeyValues = los.Deserialize(storedValue) as Dictionary<string, string>;
}
base.OnPreInit(e);
}Happy coding!!!
WOW!!!!! saved my day ...... Thank you.
ReplyDeleteI used the idea to store the selected values for a dynamically generated radiobuttonlist and restore them back between postbacks ...Thank you