Как насчет чего-то вроде этого: Случайный Генератор Файла 1.1
Или генератор Файла
У меня была та же проблема, и я хотел внести этот ресурс, где автор создал унаследованного потребителя ListItem для сохранения атрибутов в ViewState. Надеюсь, это сэкономит время, которое я потратил, пока не наткнулся на него.
protected override object SaveViewState()
{
// create object array for Item count + 1
object[] allStates = new object[this.Items.Count + 1];
// the +1 is to hold the base info
object baseState = base.SaveViewState();
allStates[0] = baseState;
Int32 i = 1;
// now loop through and save each Style attribute for the List
foreach (ListItem li in this.Items)
{
Int32 j = 0;
string[][] attributes = new string[li.Attributes.Count][];
foreach (string attribute in li.Attributes.Keys)
{
attributes[j++] = new string[] {attribute, li.Attributes[attribute]};
}
allStates[i++] = attributes;
}
return allStates;
}
protected override void LoadViewState(object savedState)
{
if (savedState != null)
{
object[] myState = (object[])savedState;
// restore base first
if (myState[0] != null)
base.LoadViewState(myState[0]);
Int32 i = 1;
foreach (ListItem li in this.Items)
{
// loop through and restore each style attribute
foreach (string[] attribute in (string[][])myState[i++])
{
li.Attributes[attribute[0]] = attribute[1];
}
}
}
}
Если вы хотите загружать элементы списка только при первой загрузке страницы, вам нужно будет включить ViewState, чтобы элемент управления мог сериализовать свое состояние там и перезагружать его при отправке страницы обратно.
Есть несколько мест, где можно включить ViewState - проверьте узел
в web.config, а также в директиве <% @ page%>
в вверху самого файла aspx для свойства EnableViewState
. Этот параметр должен быть true
для работы ViewState.
Если вы не хотите использовать ViewState, просто удалите if (! IsPostBack) {...}
из кода, который добавляет ListItems
, и элементы будут воссоздаваться при каждой обратной передаче.
Изменить: Прошу прощения - я неправильно прочитал ваш вопрос. Вы правы, что атрибуты не выдерживают обратной передачи, поскольку они не сериализованы в ViewState. Вы должны повторно добавлять эти атрибуты при каждой обратной передаче.