有没有办法在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>
答案 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();