Example #1
0
        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();
        }
Example #2
0
        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);
        }