C# 将linq扩展到sharepoint以发布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 ///

我创建了一个分部类来扩展默认的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
/// </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]);