2013-10-14 3 views
1

Я получаю сообщение об ошибке в asp.net 4.5, когда я динамически создаю кнопку в событии GridView.ROWDATABOUND.ASP Gridview Не удалось загрузить viewstate.

код кнопки:

Dim btn1 As New Button() 
btn1.ID = "btn1" 
btn1.Width = "50" 
btn1.Text = "Edit" 
btn1.CssClass = "AdminPageBtn" 
btn1.CommandName = "Edit" 
btn1.CommandArgument = "Edit" 
btn1.Enabled = True 

e.Row.Cells (e.Row.Cells.Count - 1) .Controls.Add (btn1)

И я использую AJAX 4,0 тоже , с менеджером сценариев и панелью обновления.

что кнопка выполнить метод ниже

Protected Sub gvwRoutes_RowEditing(ByVal sender As Object, 
         ByVal e As System.Web.UI.WebControls.GridViewEditEventArgs) 
       Handles gvwRoutes.RowEditing 
End Sub 

, когда она выполняется, возникает ошибка:

Failed to load viewstate. The control tree into which viewstate is being loaded must match the control tree that was used to save viewstate during the previous request. For example, when adding controls dynamically, the controls added during a post-back must match the type and position of the controls added during the initial request.

нужно решение ..!

+0

Попробуйте поместить эту кнопку в разметку. – Fals

+0

, который разрушит структуру. это работало в предыдущей версии, где не было ни аякса, ни панели обновления. Теперь он становится мусором, и я понятия не имею, зачем и что делать – gayan1991

+0

Вы только что сказали, что это anwnsear. В Unfortanally Update Panel есть много проблем, один из которых - управление View State. Каждый элемент управления должен быть создан в Page_OnInit, чтобы дать вам некоторый успех! – Fals

ответ

2

Если вы попытаетесь добавить элементы управления в середине где-то в контрольной коллекции, то вы обязательно столкнетесь с проблемами с состоянием представления. Согласно MSDN specification динамических элементов управления в Asp.net

Inserting a dynamic control somewhere other than the end of the Controls collection 
can cause a corrupted view state 

Так что возможно решение этой проблемы может быть Использование Placeholder на странице, где вы можете добавить динамические элементы управления. Это зарезервирует индекс в середине коллекции Control и позаботится о состоянии View. Поскольку новый элемент управления будет иметь свое состояние просмотра из элемента управления Placeholder.

Смежные вопросы