2013-07-11 2 views
1

У меня есть вид сетки в моем пользовательский элемент управления, и я получаю ниже ошибки:Невозможно отобразить Grid View

RegisterForEventValidation can only be called during Render(); 

Я использую gv.RenderControl(htw);

Мой код, как показано ниже:

private void ExportToExcel(string strFileName, GridView gv) 
    { 
     Response.ClearContent(); 
     Response.AddHeader("content-disposition", "attachment; filename=" + strFileName); 
     Response.ContentType = "application/excel"; 
     System.IO.StringWriter sw = new System.IO.StringWriter(); 
     HtmlTextWriter htw = new HtmlTextWriter(sw); 
     gv.RenderControl(htw); 
     Response.Write(sw.ToString()); 
     Response.End(); 
    } 

И чтобы избежать управления сервером было создано внешнее исключение управления формой. Я использую код ниже:

public override void VerifyRenderingInServerForm(Control control) 
{ 
    /* Verifies that the control is rendered */ 
} 

Но я использую весь этот код в usercontrol, этот метод не существует в базовом классе. Что мне делать, даже если я поставил выше на моей странице, в которой я размещаю свой пользовательский элемент управления, но все же я получаю ошибку выше.

Также обратите внимание, что я использую главную страницу, в которой у меня уже есть теги.

ответ

1

Установка EnableEventValidation в директиве страницы ложь решить мою проблему.

<%@ Page ............ EnableEventValidation="false" %> 
0

C#

StringWriter sw = new StringWriter(); 
HtmlTextWriter hw = new HtmlTextWriter(sw); 
Page pg = new Page(); 
HtmlForm hf = new HtmlForm(); 

hf.Attributes.Add("runat", "server"); 
hf.Controls.Add(gv); 

pg.EnableEventValidation = false; 
pg.Controls.Add(hf); 
pg.DesignerInitialize(); 
pg.RenderControl(hw); 

Current.Response.Clear(); 
Current.Response.AddHeader("content-disposition", "attachment;filename=FileName.xls"); 
Current.Response.Charset = string.Empty; 
Current.Response.ContentType = "application/vnd.xls"; 
Current.Response.Write(sw.ToString()); 
Current.Response.End(); 

VB.NET

Dim sw As New StringWriter 
Dim hw As New HtmlTextWriter(sw) 
Dim pg As New Page() 
Dim hf As New HtmlForm() 

hf.Attributes.Add("runat", "server") 
hf.Controls.Add(gv) 

pg.EnableEventValidation = False 
pg.Controls.Add(hf) 
pg.DesignerInitialize() 
pg.RenderControl(hw) 

Current.Response.Clear() 
Current.Response.AddHeader("content-disposition", "attachment;filename=FileName.xls") 
Current.Response.Charset = String.Empty 
Current.Response.ContentType = "application/vnd.xls" 
Current.Response.Write(sw.ToString()) 
Current.Response.End() 
+0

Мне нужна помощь в C#, не vb.net @nikita –

+0

@ubaidashrafmasoody, Edited, извините. Кроме того, хороший инструмент: http://www.developerfusion.com/tools/convert/vb-to-csharp/ –

+0

RegisterForEventValidation можно вызывать только во время Render(); это ошибка, которую я получаю сейчас @nikita –