C# 将linq扩展到sharepoint以发布HTML字段
我创建了一个分部类来扩展默认的spmetal类来处理发布html字段。如下文所述: 来自C# 将linq扩展到sharepoint以发布HTML字段,c#,sharepoint,linq-to-sharepoint,C#,Sharepoint,Linq To Sharepoint,我创建了一个分部类来扩展默认的spmetal类来处理发布html字段。如下文所述: 来自公共部分类RelatedLinksItem:Item的代码段,ICustomMapping: /// <summary> /// Read only data is retrieved in this method for each extended SPMetal field /// Used to Read - CRUD operation performed by SPMetal ///
公共部分类RelatedLinksItem:Item的代码段,ICustomMapping
:
/// <summary>
/// Read only data is retrieved in this method for each extended SPMetal field
/// Used to Read - CRUD operation performed by SPMetal
/// </summary>
/// <param name="listItem"></param>
[CustomMapping(Columns = new string[] { CONTENT_FIELDtesthtml, CONTENT_FIELDLink })]
public void MapFrom(object listItem)
{
SPListItem item = (SPListItem)listItem;
// link
this.ContentLink = item[CONTENT_FIELDLink] as LinkFieldValue;
// html (does NOT work)
HtmlField html = item[CONTENT_FIELDtesthtml] as HtmlField; // this returns null
// html (does work)
HtmlField html2 = (HtmlField)item.Fields.GetFieldByInternalName(CONTENT_FIELDtesthtml); // this returns object
this.Contenttesthtml = html2;
this.TestHtml = html2.GetFieldValueAsText(item[CONTENT_FIELDtesthtml]); // set property for rendering html
}
//
///对于每个扩展的SPMetal字段,使用此方法检索只读数据
///用于读取SPMetal执行的积垢操作
///
///
[自定义映射(列=新字符串[]{CONTENT\u FIELDtesthtml,CONTENT\u FIELDLink}]
公共void映射自(对象列表项)
{
SPListItem=(SPListItem)listItem;
//链接
this.ContentLink=项[CONTENT\u FIELDLink]作为LinkFieldValue;
//html(不工作)
HtmlField html=item[CONTENT\u FIELDtesthtml]作为HtmlField;//返回null
//html(确实有效)
HtmlField html2=(HtmlField)item.Fields.GetFieldByInternalName(CONTENT_FIELDtesthtml);//此返回对象
this.Contenttesthtml=html2;
this.TestHtml=html2.GetFieldValueAsText(项[CONTENT_FIELDtesthtml]);//设置呈现html的属性
}
“Web部件”中的代码片段:
protectedoverride void CreateChildControls()受保护的覆盖
{
使用(OrganizationalPoliciesDataContext=new OrganizationalPoliciesDataContext(SPContext.Current.Web.Url))
{
var results=来自context.RelatedLinks中的链接
选择链接;
foreach(结果中的var链接)
{
//渲染链接
添加(新的LiteralControl(string.Format(Link:{0}”,Link.ContentLink));
//呈现html
添加(新的LiteralControl(string.Format(HTML:{0}”,link.TestHtml));
}
}
}
两个问题:
HtmlField html=item[CONTENT\u FIELDtesthtml]作为HtmlField
返回null
,但是项.Fields.GetFieldByInternalName
工作正常吗GetFieldValueAsText
方法
Web部件或是将值存储在自定义文件中的方法
用于以后访问的属性是否可以接受项[CONTENT\u FIELDtesthtml]
的字段值强制转换为类型HtmlField
。但是HtmlField
表示字段的类型,而不是字段值的类型。因此HtmlField html
将被分配null
。选中此项可查看所有发布字段类型和值类型的引用。我不确定
HtmlField
的字段值类型是什么。可能只是字符串
因此,将其转换为字符串应该是安全的:
string html = Convert.ToString(item[CONTENT_FIELDtesthtml]);
string html = Convert.ToString(item[CONTENT_FIELDtesthtml]);