为什么SharePoint将URL从其他web应用程序更改为当前web应用程序,以及如何避免这种情况
我正在使用sharepoint对象模型开发一个web部件,从不同web应用程序中的列表中获取列表项,我做到了为什么SharePoint将URL从其他web应用程序更改为当前web应用程序,以及如何避免这种情况,sharepoint,Sharepoint,我正在使用sharepoint对象模型开发一个web部件,从不同web应用程序中的列表中获取列表项,我做到了 protected override void CreateChildControls() { SPSite site = new SPSite("http://myhost/"); ListViewByQuery lview = new ListViewByQuery(); SPWeb web = site.OpenWeb(); lview.List =
protected override void CreateChildControls()
{
SPSite site = new SPSite("http://myhost/");
ListViewByQuery lview = new ListViewByQuery();
SPWeb web = site.OpenWeb();
lview.List = web.Lists["Tasks"];
lview.Query= new SPQuery(lview.List.Views["All Tasks"]);
this.Controls.Add(lview);
}
当我在除“”以外的web应用程序中使用我的web部件时,我将在“”中使用它,它会将所有URL替换为“myhost”为“mysite”,为什么要这样做,以及如何绕过它。我已经在同一服务器上测试了您的代码查询不同的web应用程序,并且可以重现您描述的问题。之所以出现这种情况,是因为SharePoint呈现的是页面的相对URL,而不是绝对URL。因此,它错误地链接到当前的web应用程序 不幸的是,根据Reflector,SharePoint对该渲染的实际操作是模糊的。看起来,Microsoft并不打算对其他web应用程序使用此控件。在本例中,我解决问题的方法是使用jQuery(,)或HTTP模块来更正URL (请注意,两者都存在支持性问题……Microsoft可能会在将来的service pack或版本中更改此控件的输出方式,这将破坏您的自定义代码。) 编辑:根据Kit的评论更正
编辑2:重写。我已经测试了您的代码,在同一台服务器上查询不同的web应用程序,可以重现您描述的问题。之所以出现这种情况,是因为SharePoint呈现的是页面的相对URL,而不是绝对URL。因此,它错误地链接到当前的web应用程序 不幸的是,根据Reflector,SharePoint对该渲染的实际操作是模糊的。看起来,Microsoft并不打算对其他web应用程序使用此控件。在本例中,我解决问题的方法是使用jQuery(,)或HTTP模块来更正URL (请注意,两者都存在支持性问题……Microsoft可能会在将来的service pack或版本中更改此控件的输出方式,这将破坏您的自定义代码。) 编辑:根据Kit的评论更正
编辑2:重写。查看这篇关于Content Monster Web部件的文章()。它可能解决了您的问题,或者至少给了您一个想法。查看这篇关于Content Monster Web部件的文章()。它可能解决了您的问题,或者至少给了您一个想法。正如Alex所写,您不能使用SharePoint对象模型从其他网站集获取数据,而不是您当前所在的网站集。我建议使用内置的Web服务(更具体地说,是Lists.asmx方法)来检索数据。正如Alex所写,您不能使用SharePoint对象模型从其他网站集获取数据,而不是您当前所在的网站集。我建议使用内置的Web服务(更具体地说,是Lists.asmx方法)来检索数据。如果我错了,请纠正我。。。但您可以访问其他网站集中的数据,只要这些数据位于同一web应用程序中。我认为您在这里不是指网站集。@Kit您如何使用SPQuery跨网站集进行查询。也许我错了,但我相信SPQuery有一个特定列表的边界。有一个SPSiteDataQuery API用于跨网站集中的列表进行查询。我不知道任何允许跨网站集查询的内容。现在重写答案以解决所问的特定问题。但是,您可以查询不同的网站集,但一次只能查询一个-不可能跨网站集查询。如果我错了,请更正我。。。但您可以访问其他网站集中的数据,只要这些数据位于同一web应用程序中。我认为您在这里不是指网站集。@Kit您如何使用SPQuery跨网站集进行查询。也许我错了,但我相信SPQuery有一个特定列表的边界。有一个SPSiteDataQuery API用于跨网站集中的列表进行查询。我不知道任何允许跨网站集查询的内容。现在重写答案以解决所问的特定问题。但是,您可以查询不同的网站集,但一次只能查询一个-不可能跨网站集进行查询。Web服务是一个好主意,但需要进行一些更正。首先,它是“Lists.asmx”。第二,正如我在下面Alex的回答中提到的,您可以跨网站集检索数据,但不能跨Web应用程序检索数据。感谢您的更正和编辑@(Web服务名称是您不能输入错误的地方:P)。像JD一样,我仍然不相信您可以使用对象模型跨网站集检索数据。。。或者至少,我不知道该怎么做。您能给我们举个例子吗?Web服务是一个好主意,但有几处需要更正。首先,它是“Lists.asmx”。第二,正如我在下面Alex的回答中提到的,您可以跨网站集检索数据,但不能跨Web应用程序检索数据。感谢您的更正和编辑@(Web服务名称是您不能输入错误的地方:P)。像JD一样,我仍然不相信您可以使用对象模型跨网站集检索数据。。。或者至少,我不知道该怎么做。你能给我们举个例子吗?