Не знаю сталкивался кто-нибудь с тем, что если в web.config прописана русская кодировка
<system.web>
<globalization culture="ru-RU" uiCulture="ru-RU" fileEncoding="windows-1251" responseHeaderEncoding="windows-1251" responseEncoding="windows-1251" requestEncoding="windows-1251"/>
</system.web>
то если на страничке есть дерево (TreeView) , а у него узел с русским именем, и включена дозагрузка ветвей с клиента (PopulateNodesFromClient="true"). Соотвественно при попытке получить потомков узла (callback) получаем
ошибку: "Input string was not in a correct format." В то же время, если убрать определение requestEncoding="windows-1251", то оно становится по умолчанию requestEncoding="utf-8". Но в этом случае теряется содержимое полей формы (с русскими символами) на других страницах. Решение получилось таким:
//Перегружаем метод InitializeCulture() класса Page.
protected override void InitializeCulture()
{
string cp = Page.Request.Params["__CALLBACKPARAM"];
if (!string.IsNullOrEmpty(cp)) //Если был CallBack
{
//Исправляем кодировку
byte[] ua = System.Text.Encoding.GetEncoding("windows-1251").GetBytes(cp);
byte[] ba = System.Text.Encoding.Convert(System.Text.Encoding.UTF8, System.Text.Encoding.GetEncoding("windows-1251"), ua);
string s = new string(System.Text.Encoding.GetEncoding("windows-1251").GetChars(ba));
//Устанавливаем свойство IsReadOnly=false для коллекций Params и Form
Type nvcType = Page.Request.Form.GetType();
nvcType.InvokeMember("IsReadOnly", BindingFlags.NonPublic | BindingFlags.SetProperty | BindingFlags.FlattenHierarchy | BindingFlags.Instance, null, Page.Request.Form, new object[] { false });
nvcType.InvokeMember("IsReadOnly", BindingFlags.NonPublic | BindingFlags.SetProperty | BindingFlags.FlattenHierarchy | BindingFlags.Instance, null, Page.Request.Params, new object[] { false });
//Подменяем значение переменной
Page.Request.Form["__CALLBACKPARAM"] = s;
Page.Request.Params["__CALLBACKPARAM"] = s;
}
base.InitializeCulture();
}