簡體   English   中英

將linq擴展到sharepoint以發布HTML字段

[英]Extending linq to sharepoint for Publishing HTML fields

我創建了一個部分類來擴展默認的spmetal類來處理發布html字段。 如下所述:

擴展對象關系映射

public partial class RelatedLinksItem : Item, ICustomMapping片段public partial class 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
}

來自“webpart”的片段:

    protected override void CreateChildControls()
    {
        using (OrganisationalPoliciesDataContext context = new OrganisationalPoliciesDataContext(SPContext.Current.Web.Url))
        {
            var results = from links in context.RelatedLinks
                          select links;

            foreach (var link in results)
            {
                // render link
                Controls.Add(new LiteralControl(string.Format("<p>Link: {0}</p>", link.ContentLink)));

                // render html
                Controls.Add(new LiteralControl(string.Format("<p>HTML: {0}</p>", link.TestHtml)));
            }
        }
    }

兩個問題:

  1. 為什么HtmlField html = item[CONTENT_FIELDtesthtml] as HtmlField; 返回null ,但item.Fields.GetFieldByInternalName正常工作?
  2. 有沒有辦法在webpart中使用GetFieldValueAsText方法,或者是將值存儲在自定義屬性中以便以后訪問的方法?
  1. 您正在將item[CONTENT_FIELDtesthtml]的字段值轉換為類型HtmlField 但是HtmlField表示字段的類型,而不是字段值的類型。 因此, HtmlField html將被賦值為null 檢查此MSDN頁面以獲取所有發布字段類型和值類型的參考。
    我不確定HtmlField的字段值類型是什么。 可能只是string
    所以你應該可以安全地將其轉換為字符串:

     string html = Convert.ToString(item[CONTENT_FIELDtesthtml]); 
  2. 我認為將價值存儲在房產中是可行的方法。 這樣就實現了數據層和表示層的分離。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM