在<sharepoint:listview> control </sharepoint:listview>中动态设置ListId

时间:2009-10-22 13:42:11

标签: sharepoint listview

有没有办法在ListView控件中动态设置ListId字段。我们无法保证我们感兴趣的列表在安装之间具有一致的GUID(该列表部署为我们无法控制的站点模板的一部分)。我已经尝试使用PreInit事件来设置变量(请参阅list guid:部分。如果我删除ListView标记,我会看到打印出正确的GUID。所以我正在正确地收集GUID。但是,列表视图使用以下消息控制错误:“Guid应该包含32位数字,带有4个破折号”。这告诉我标签没有得到变量集。这是正确的吗?还有另一种方法来指定要使用的列表吗?

可以这样做吗?

示例代码如下:

<%@ Register TagPrefix="Sharepoint" ...details deleted.. %>
<br>
...stuff deleted.
<br>
<asp:Content ContentPlaceHolderId="PlaceHolderMain" runat="server"> 
  ... more stuff deleted...
  <p>list guid: <%=ListGuid %>    
  <Sharepoint:ListView ListId="<%=ListGuid %>" Enabled="true" runat="server" />
  <p>
</asp:Content>



<script runat="server">
string ListGuid = string.Empty;

protected void Page_PreInit(object sender, EventArgs e)
{

  SPSite Site = SPContext.Current.Site;
  using (SPWeb HelpDesk = Site.OpenWeb("HelpDesk"))
  {
    SPList list = HelpDesk.Lists["Charge Numbers"];
    ListGuid = list.ID.ToString();
  }

}

</script>

2 个答案:

答案 0 :(得分:0)

我认为您收到的错误消息告诉您出了什么问题...... ToString()正在将GUID转换为无效格式。 tostring有一个重载

list.ID.ToString("N");
list.ID.ToString("D"); (this is the default)
list.ID.ToString("B");
list.ID.ToString("P");

...全部试试

答案 1 :(得分:0)

像你那样使用服务器端代码注入更多的服务器端代码有点奇怪,似乎不太可行。 SharePoint日志对其尝试加载的列表ID的说法是什么?我的猜测是,它并没有真正尝试加载您在ListGuid变量中设置的GUID所代表的列表。

为什么不在应用程序页面的ListGuid事件处理程序中设置控件的ListId属性,而不是试图强制使用某个全局Load变量来获取正确的guid?

在aspx文件中:

<SharePoint:ListView Id="lv" runat="server" />

在应用程序页面的代码隐藏中:

protected ListView lv

在加载事件中:

SPList list = HelpDesk.Lists["Charge Numbers"];
Guid myguid = list.ID;
lv.ListId = myguid.ToString();