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部件时出错”
答案 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");