public override void Render(WmlMobileTextWriter writer) { if (RequiresUTF8ContentEncoding()) { Page.Response.ContentEncoding = UTF8Encoding; } writer.BeginResponse(); writer.BeginFile(Page.Request.Url.ToString(), _contentType, Page.Response.Charset); RenderXmlHeader(writer); writer.WriteFullBeginTag("wml"); if (Device.SupportsCacheControlMetaTag) { writer.Write(_cacheExpiry); } else { Page.Response.AppendHeader("Cache-Control", "max-age=0"); } if (Device.CanCombineFormsInDeck) { _renderableForms = Page.ActiveForm.GetLinkedForms(OptimumPageWeight); Debug.Assert(_renderableForms != null, "_renderableForms is null"); } else { _renderableForms = new ArrayList(); _renderableForms.Add(Page.ActiveForm); } foreach (Form form in _renderableForms) { RenderForm(writer, form); } writer.RenderExtraCards(); writer.WriteEndTag("wml"); writer.EndFile(); writer.EndResponse(); }
public virtual bool HandleError(Exception e, HtmlTextWriter writer) { WmlMobileTextWriter wmlWriter = (WmlMobileTextWriter)writer; bool renderBackButton = Device.NumberOfSoftkeys > 2 && !Device.HasBackButton; // set mime type, in case init() has not been called yet Page.Response.ContentType = _contentType; Exception ex; if ((e is HttpException && e.InnerException != null) || (e is System.Reflection.TargetInvocationException && e.InnerException != null)) { ex = e.InnerException; } else { ex = e; } if (RequiresUTF8ContentEncoding()) { Page.Response.ContentEncoding = UTF8Encoding; } wmlWriter.BeginResponse(); wmlWriter.BeginFile(Page.Request.Url.ToString(), _contentType, Page.Response.Charset); RenderXmlHeader(writer); // First card. writer.WriteFullBeginTag("wml"); if (Device.SupportsCacheControlMetaTag) { writer.Write(_cacheExpiry); } else { Page.Response.AppendHeader("Cache-Control", "max-age=0"); } writer.WriteFullBeginTag("card"); writer.WriteFullBeginTag("p"); writer.WriteFullBeginTag("big"); writer.WriteFullBeginTag("b"); wmlWriter.WriteEncodedText(SR.GetString(SR.WmlPageAdapterServerError, HttpRuntime.AppDomainAppVirtualPath)); writer.WriteEndTag("b"); writer.WriteEndTag("big"); writer.WriteEndTag("p"); writer.WriteFullBeginTag("p"); writer.Write("<do type=\"accept\" label=\""); writer.Write(GetDefaultLabel(MoreLabel)); writer.Write("\"><go href=\"#more\" /></do>"); if (renderBackButton) { writer.Write("<do type=\"prev\" label=\""); writer.Write(GetDefaultLabel(BackLabel)); writer.WriteLine("\"><prev /></do>"); } wmlWriter.WriteEncodedText(ex.GetType().ToString()); writer.Write("<br />"); wmlWriter.WriteEncodedText(ex.Message); writer.Write("<br />"); wmlWriter.WriteEncodedText(SR.GetString(SR.WmlPageAdapterMethod)); wmlWriter.WriteEncodedText(ex.TargetSite.Name); writer.Write("<br />"); writer.WriteEndTag("p"); writer.WriteEndTag("card"); // Stack trace card. writer.Write("<card id=\"more\">"); writer.Write("<p mode=\"nowrap\">"); if (renderBackButton) { writer.Write("<do type=\"prev\" label=\""); wmlWriter.WriteEncodedText(GetDefaultLabel(BackLabel)); writer.WriteLine("\"><prev /></do>"); } String stackTrace = ex.StackTrace; int maximumStackTrace = OptimumPageWeight / 2; if (stackTrace.Length > maximumStackTrace) { wmlWriter.WriteEncodedText(SR.GetString(SR.WmlPageAdapterStackTrace)); writer.Write("<br />"); stackTrace = stackTrace.Substring(0, maximumStackTrace); } else { wmlWriter.WriteEncodedText(SR.GetString(SR.WmlPageAdapterPartialStackTrace)); writer.Write("<br />"); } int lineBegin = 0; int lineEnd; while (lineBegin < stackTrace.Length) { lineEnd = stackTrace.IndexOf("\r\n", lineBegin); if (lineEnd == -1) { lineEnd = stackTrace.Length; } wmlWriter.WriteEncodedText(stackTrace.Substring(lineBegin, lineEnd - lineBegin)); writer.Write("<br />"); lineBegin = lineEnd + 2; } writer.WriteEndTag("p"); writer.WriteEndTag("card"); writer.WriteEndTag("wml"); wmlWriter.EndFile(); wmlWriter.EndResponse(); return(true); }