Converting Web Application from 1.1 to 2.0

I have a working web application that was written using the .NET Framework 1.1. I am trying to recompile it using .NET 2.0 and VS 2005 without updating any of the deprecated or obsolete api calls. It compiles without errors - but fails when attempting to render an XML control. I can find no documentation for System.Web.UI.Control.ResolvePhysicalOrVirtualPath anybody got any ideas what the problem is

Thanks

Nigel

Object reference not set to an instance of an object.
at System.Web.UI.Control.ResolvePhysicalOrVirtualPath(String path, VirtualPath& virtualPath, String& physicalPath)
at System.Web.UI.WebControls.Xml.LoadTransformFromSource()
at System.Web.UI.WebControls.Xml.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Control.Render(HtmlTextWriter writer)
at MCMS.Rapid.Controls.Cms.CmsXmlContentBase.Render(HtmlTextWriter writer) in C:\RapidSource\MCMS.Rapid.Controls\Cms\CmsXmlContentBase.cs:line 58
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlContainerControl.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.HtmlControls.HtmlForm.Render(HtmlTextWriter output)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.HtmlControls.HtmlForm.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Control.RenderChildrenInternal(HtmlTextWriter writer, ICollection children)
at System.Web.UI.Control.RenderChildren(HtmlTextWriter writer)
at System.Web.UI.Page.Render(HtmlTextWriter writer)
at System.Web.UI.Control.RenderControlInternal(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer, ControlAdapter adapter)
at System.Web.UI.Control.RenderControl(HtmlTextWriter writer)
at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)



Answer this question

Converting Web Application from 1.1 to 2.0

  • Wil Burton

    Nigel, it looks like you're caching the HtmlTextWriter for a control in ASP.NET cache. Caching controls, writers, or other parts of controls isn't a supported ASP.NET scenario and can lead to many other unexpected side effects. The best thing to do is to use Output Caching for caching pages or Partial Caching for caching controls on pages. These scenarios have been tested well and are supported code paths.

    I hope this doesn't derail your project too much, and I hope that one of our supported caching solutions works for you.

    Polita



  • paso

    This looks like a bug in XML control. I'll try to find more infor.



  • Nick...A

    My guess is you need to initialize the fields of the asp xml control before Render. So try overriding OnLoad and setting up the xml control there.
  • Pradeep Gupta

    Nigel, can you provide us with more information on your scenario A repro case is best, but a description of how you're using the Xml control will help too. It looks like you're calling a custom render class (CmsXmlContentBase.Render). Can you describe what it's doing

    Thanks,

    Polita Paulus

    ASP.NET Development Team



  • Cris001

    Hi Guys

    Thanks for helping.

    Here is the render code... The failure is at the base.Render( writer); line.

    The class (eventually) inherits :- System.Web.UI.UserControl

    protected override void Render(System.Web.UI.HtmlTextWriter writer)
    {
    if (_CacheContent && !(bool)_CachingOff)
    {
    System.IO.TextWriter tw = (System.IO.TextWriter)System.Web.HttpContext.Current.Cache[CacheKey];
    if (tw == null)
    {
    tw = new System.IO.StringWriter();
    System.Web.UI.HtmlTextWriter html = new System.Web.UI.HtmlTextWriter(tw);
    RenderChildren(html);
    try
    {
    System.Web.HttpContext.Current.Cache.Add(CacheKey, tw, null, DateTime.Now.AddMinutes(int.Parse(_CachePeriod)), TimeSpan.Zero,System.Web.Caching.CacheItemPriority.Low, null) ;
    }
    catch (Exception ex)
    {
    Logging.Log(new Exception("Unable to Cache control: " + this.GetType().ToString(), ex));
    }
    }
    else if (CmsContext.ExtendedTrace) Logging.Trace("Using cached content: " + this.GetType().ToString());

    writer.Write(tw.ToString());
    }
    else
    base.Render(writer);
    }

    The control is added to the page by :- idXml = AddXmlControl();

    This is where we set up the control :-


    if (_PathToXslt != "" && _PathToXslt != null)
    {
    if (_PathToXslt.ToLower() == "showxml")
    idXml.Transform = ShowXmlXslt;
    else
    {
    if (System.IO.File.Exists(Server.MapPath(XsltTemplatePrefix + XsltTemplatePath)))
    idXml.TransformSource = XsltTemplatePrefix + XsltTemplatePath;
    else
    {
    Logging.Log(Server.MapPath(XsltTemplatePrefix + XsltTemplatePath) + " - File not found");
    idXml.Transform = LoadXsltTransform("XsltNotfound");
    }
    }
    }
    else
    {
    if (_XsltDocument == null)
    _XsltDocument = GetDefaultXslt();

    idXml.Transform = _XsltDocument;
    }

    idXml.Document = Document;

    .....

    protected virtual XslTransform LoadXsltTransform(string XsltName)
    {
    XslTransform t = new XslTransform();
    XmlTextReader oRdr = new XmlTextReader(Resources.GetResourceStream("CmsControls.Xslt." + XsltName + ".xslt"));
    t.Load(oRdr, null, null);
    oRdr.Close();
    return t;
    }

    protected virtual XslTransform ShowXmlXslt
    {
    get
    {
    string sShowXmlPath = (string)CmsApplication.Current.Settings["XXXX.System.Development.ShowXmlXslt", "string"];
    if (sShowXmlPath != "")
    {
    System.Xml.Xsl.XslTransform oTrans = new XslTransform();
    oTrans.Load(Server.MapPath(sShowXmlPath));
    return oTrans;
    }

    try
    {
    if ((bool)CmsApplication.Current.Settings["XXXX.System.Development.ShowXmlIE", "bool"] == true)
    return LoadXsltTransform("ShowXmlIE");
    else
    return LoadXsltTransform("ShowXml");
    }
    catch (Exception ex)
    {
    Response.Write(ex.Message);
    }
    return null;
    }
    }

    protected virtual XslTransform GetDefaultXslt()
    {
    return ShowXmlXslt;
    }

    I hope this helps...

    Thanks

    Nigel


  • Converting Web Application from 1.1 to 2.0