webpart正在处理本地服务器,但是当在Webpart中使用“SPSite”类时,它不会处理生产

时间:2010-07-20 14:43:27

标签: sharepoint wss wss-3.0

webpart正在处理本地服务器,但在Web部件中使用“SPSite”类时,不在生产服务器上工作。在生产服务器上它会抛出错误。如果我不在webpart中使用该类,则Web部件也适用于实时计算机。

知道可能导致错误的原因是什么?

webpart中的代码是:

namespace CompanyNews
{
    [Guid("40de3c60-9e30-4050-b9f3-01e71868f522")]
    public class CompanyNews : System.Web.UI.WebControls.WebParts.WebPart
    {
        private HtmlTextWriter writer;
        public CompanyNews()
        {
        }
        protected override void RenderContents(HtmlTextWriter writer)
        {
            base.RenderContents(writer);
            using (SPSite site = SPContext.Current.Site)
            {
                using (SPWeb web = site.OpenWeb())
                {
                    string listName = "News Display";
                    writer.Write(listName);
                    SPList list = null;
                    foreach (SPList currentList in web.Lists)
                    {
                        if (currentList.Title.Equals(listName,
                                                     StringComparison.InvariantCultureIgnoreCase))
                        {
                            list = currentList;
                            break;
                        }
                    }
                    writer.WriteBeginTag("ul");
                    foreach (SPListItem item in list.Items)
                    {                    
                        writer.Write("<li style=\"font-size:12px;padding:1px\">");
                        writer.Write(item["Title"].ToString() + "...   ");
                        writer.Write("<a class=\"smallerred\" href=\"#\">Read More</a>");
                        writer.Write("</li>");
                    }
                    writer.WriteEndTag("ul");
                }
            }
        }

    }
}

webpart的dll位于bin文件夹中,而web.config文件中有一个用于web par的条目作为安全控件。 显示“hellow world”消息的其他webpart也以相同的方式上传到生产中。 我猜它是导致问题的代码。

错误消息为:“预览Web部件时出错”

2 个答案:

答案 0 :(得分:1)

只是我注意到的一点,你不应该在using语句中将当前上下文中的对象包装起来。好文章Clicky

更好的做法是使用以下

using (SPSite mySite = new SPSite(SPContext.Current.Site.Url))
{
...
} 

此外,您应该考虑在WSP中打包解决方案,允许stsadm部署它。拖入GAC并不是一个很好的做法。

沙恩

答案 1 :(得分:0)

SPSite对象无法在我能看到的任何地方获得参考。你为什么不把它移除,因为它超出了你的需求?

SPWeb web = SPContext.Current.Web;  
                string listName = "News Display"; 
                writer.Write(listName); 
                SPList list = null; 
                foreach (SPList currentList in web.Lists) 
                { 
                    if (currentList.Title.Equals(listName, 
                                                 StringComparison.InvariantCultureIgnoreCase)) 
                    { 
                        list = currentList; 
                        break; 
                    } 
                } 
                writer.WriteBeginTag("ul"); 
                foreach (SPListItem item in list.Items) 
                {                     
                    writer.Write("<li style=\"font-size:12px;padding:1px\">"); 
                    writer.Write(item["Title"].ToString() + "...   "); 
                    writer.Write("<a class=\"smallerred\" href=\"#\">Read More</a>"); 
                    writer.Write("</li>"); 
                } 
                writer.WriteEndTag("ul");