In ASP.NET ist es eigentlich sehr simpel diverse Controls als HTML-String zu rendern. Doch leider gibt es bei dem GridView-Control noch immer einen kleinen Bug, der mich fast zu Verzweiflung getrieben hätte.
Üblicher weg:
function static string GetHTMLCode(ref GridView aGridView)
{
StringWriter sw = new StringWriter();
HtmlTextWriter htmlw = new HtmlTextWriter(sw);
aGridView.RenderControl(htmlw );
return sw.ToString();
}
Das StringWriter-Objekt sollte jetzt den HTMLCode enthalten... LOL! Natürlich nicht
Bei diesem Ansatz wird leider eine Exception vom Typ System.Web.HttpException geworfen. Grund ist anscheinend, dass sich das GridView nicht in einem als runat="server" gekennzeichneten Form-Tag befindet.
Fehlertext:
"Exception message: Control 'ctl00_MainContentPlaceHolder_GridViewOrderItems' of type 'GridView' must be placed inside a form tag with runat=server. "
Um das Problem zu lösen gibt es ein Spitzenklasse, total verständliche und völlig sinnvolle Lösung...
Bindet auf der *.aspx Datei, in der sich das GridView befinden, noch folgende grenzgeniale Funktion ein. Der Code sollte selberklärend und leicht verständlich sein.
public override VerifyRenderingInServerFor(mControl control)
{
}
Jetzt sollte die Methode GridView.RenderControl() funktionieren. Jedoch nur wenn sich keine anderen Controls wie z.B. CheckBoxen, DropDownlisten und co. darin befinden ansonsten wird wieder ein Exeption geworfen.
Diese kann jedoch unterdrückt werden indem man das EnableEventValidation-Seitendirektiv auf FALSE setzt.
<%@ Page Language=”C#” CodeFile=”MyPage.aspx.cs” Inherits=”_MyPage” EnableEventValidation=”false” AutoEventWireup=”true” %>
Und nun sollte es flutschen
! Viel Spass!