QueryStringPageViewer WebPart for Sharepoint

    /// <summary>
    /// Mads Haugbø Nissen 2003(c)
    /// Objectware AS
    /// Norway
    /// 
    /// http://weblogs.asp.net/mnissen
    /// 
    /// The QueryStringPageViewer provides the same functionality as the regular PageViewerWebPart
    /// but allows providing a selection of querystring parameters from the page that hosts this webpart
    /// to the page viewed in the QueryStringPageViewer.
    /// </summary>
    [DefaultProperty("ContentLink"),
    ToolboxData("<{0}:QueryStringPageViewer runat=server></{0}:QueryStringPageViewer>"),
    XmlRoot(Namespace="http://www.objectware.no/Lawyer/Sharepoint/Webparts/QueryStringPageViewer")]
    public class QueryStringPageViewer : Microsoft.SharePoint.WebPartPages.WebPart
    {
        private string _contentLink = "";
        [Browsable(true)]
        [Category("Content")]
        [DefaultValue("")]
        [WebPartStorage(Storage.Shared)]
        [FriendlyName("The url of the content to show.")]
        [Description("Supply Querystring params to be passed like this: Page.aspx?Param1&Param2&Param3")]
        public string ContentLink
        {
            get
            {
                return this._contentLink;
            }
            set
            {
                this._contentLink = value;
            }
        }
        
        protected string BaseUrl
        {
            get
            {
                int endIndex = this.ContentLink.IndexOf("?");
                if(endIndex != -1)
                    return this.ContentLink.Substring(0, endIndex + 1);
                else
                    return "";
            }
        }
        /// <summary>
        /// Render this Web Part to the output parameter specified.
        /// </summary>
        /// <param name="output"> The HTML writer to write out to </param>
        protected override void RenderWebPart(HtmlTextWriter output)
        {
            string url = this.UrlWithQueryStringGet();
            if(url.Length > 0)
            {
                string name = "QueryStringPageViewer_" + this.UniqueID;
                output.AddAttribute(HtmlTextWriterAttribute.Id, name, false);
                output.AddAttribute(HtmlTextWriterAttribute.Name, name, false);
                output.AddAttribute(HtmlTextWriterAttribute.Width, "100%", false);
                output.AddAttribute(HtmlTextWriterAttribute.Height, "100%", false);
                output.AddAttribute(HtmlTextWriterAttribute.Height, "100%", false);
                output.AddAttribute(HtmlTextWriterAttribute.Src, url, false);
                output.AddAttribute("ddf_src", url, false);
                output.AddAttribute("frameBorder", "0", false);
                output.RenderBeginTag(HtmlTextWriterTag.Iframe);
                output.RenderBeginTag(HtmlTextWriterTag.Div);
                output.Write("IFrames not supported by this browser");
                output.RenderEndTag();
                output.RenderEndTag();            
            }
            else
            {
                Control c = new LiteralControl(string.Format("To link to content, <a href=\"javascript:MSOTlPn_ShowToolPaneWrapper('{0}','{1}','{2}');\">open the tool pane</a> and then type a URL in the ContentLink text box with QueryString parameters formatted like this: 'Page.aspx?Param1&Param2'.", 1, 129, this.ID)); 
                c.RenderControl(output);
            }
        }
        
        private ArrayList QueryStringKeysGet()
        {
            int startIndex = this.ContentLink.IndexOf("?");
            ArrayList queryStrings = new ArrayList();
            if(startIndex > -1 && this.ContentLink.Length > startIndex + 1)
            {
                string queryStringRaw = this.ContentLink.Substring(startIndex + 1);
                if(queryStringRaw.IndexOf("&") != -1)
                {    
                    string[] tokens = queryStringRaw.Split(new char[]{'&'});
                    for(int i = 0; i < tokens.Length; i++)
                        queryStrings.Add(tokens[i].ToLower());
                }
                else
                {
                    queryStrings.Add(queryStringRaw.ToLower());
                }
            }
            return queryStrings;
        }
        protected virtual string UrlWithQueryStringGet()
        {
            ArrayList queryStringsToPass = this.QueryStringKeysGet();
            string url = this.BaseUrl;
            
            for(int i=0; i < Page.Request.QueryString.Count; i++)
            {
                string queryStringKey = Page.Request.QueryString.Keys[i];
                string queryStringValue =  Page.Request.QueryString[i];
                if(queryStringsToPass.IndexOf(queryStringKey.ToLower()) != -1)
                {
                    url += queryStringKey + "=" + queryStringValue + "&";
                }
            }
            
            url = url.TrimEnd(new char[]{'&'});
            return url;
        }
    }
<?xml version="1.0" encoding="utf-8"?>
<WebPart xmlns="http://schemas.microsoft.com/WebPart/v2" >
    <Title>QueryStringPageViewer</Title>
    <Description>Passes querystring parameters to the page in the viewer.</Description>
    <Assembly>Objectware.Lawyer.Sharepoint</Assembly>
    <TypeName>Objectware.Lawyer.Sharepoint.WebParts.QueryStringPageViewer</TypeName>
    <!-- Specify initial values for any additional base class or custom properties here. -->
    <ContentLink xmlns="http://www.objectware.no/Lawyer/Sharepoint/Webparts/QueryStringPageViewer"></ContentLink>
</WebPart>

9 Comments

Comments have been disabled for this content.