值得注意的是VerifyRenderingInServerForm重載方法:
MSDN上的 VerifyRenderingInServerForm 方法的描述:
必須位于 <form runat=server> 標(biāo)記中的控件可以在呈現(xiàn)之前調(diào)用此方法,以便在控件被置于標(biāo)記外時(shí)顯示錯(cuò)誤信息。發(fā)送回或依賴(lài)于注冊(cè)的腳本塊的控件應(yīng)該在 Control.Render 方法的重寫(xiě)中調(diào)用此方法。呈現(xiàn)服務(wù)器窗體元素的方式不同的頁(yè)可以重寫(xiě)此方法以在不同的條件下引發(fā)異常。
如果回發(fā)或使用客戶端腳本的服務(wù)器控件沒(méi)有包含在 HtmlForm 服務(wù)器控件 (<form runat="server">) 標(biāo)記中,它們將無(wú)法正常工作。這些控件可以在呈現(xiàn)時(shí)調(diào)用該方法,以在它們沒(méi)有包含在 HtmlForm 控件中時(shí)提供明確的錯(cuò)誤信息。
開(kāi)發(fā)自定義服務(wù)器控件時(shí),通常在為任何類(lèi)型的輸入標(biāo)記重寫(xiě) Render 方法時(shí)調(diào)用該方法。這在輸入控件調(diào)用 GetPostBackEventReference 或發(fā)出客戶端腳本時(shí)尤其重要。復(fù)合服務(wù)器控件不需要作出此調(diào)用。
沒(méi)有這個(gè)方法,程序?qū)?bào)錯(cuò)。 詳情請(qǐng)點(diǎn)擊
可使用如下代碼:
protected void Button1_Click(object sender, EventArgs e)
??? {
??????? Response.Clear();
??????? Response.Buffer = true;
??????? Response.Charset = "GB2312";
??????? Response.AppendHeader("Content-Disposition", "attachment;filename=StuInfo.xls");
??????? // 如果設(shè)置為 GetEncoding("GB2312");導(dǎo)出的文件將會(huì)出現(xiàn)亂碼!!!
??????? Response.ContentEncoding = System.Text.Encoding.UTF7;
??????? Response.ContentType = "application/ms-excel";//設(shè)置輸出文件類(lèi)型為excel文件。
??????? System.IO.StringWriter oStringWriter = new System.IO.StringWriter();
??????? System.Web.UI.HtmlTextWriter oHtmlTextWriter = new System.Web.UI.HtmlTextWriter(oStringWriter);
??????? this.GridView1.RenderControl(oHtmlTextWriter);
??????? Response.Output.Write(oStringWriter.ToString());
??????? Response.Flush();
??????? Response.End();
??? }???
??? public override void VerifyRenderingInServerForm(Control control)
??? {
??? }
??? protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
??? {
??????? if (e.Row.RowType == DataControlRowType.DataRow)
??????? {
??????????? e.Row.Cells[1].Attributes.Add("style", "vnd.ms-excel.numberformat:@;");
??????? }
??? }?