Расширение linq до sharepoint для публикации полей HTML - PullRequest
4 голосов
/ 09 января 2012

Я создал частичный класс для расширения стандартного класса spmetal для обработки публикации HTML-полей.Как указано здесь:

Расширение объектно-реляционного сопоставления

Фрагмент из 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. Есть ли способ использоватьGetFieldValueAsText метод изнутри веб-части или подход сохранения значения в пользовательском свойстве для доступа к более позднему приемлемому?

1 Ответ

0 голосов
/ 09 января 2012
  1. Вы приводите значение поля item[CONTENT_FIELDtesthtml] к типу HtmlField.Но HtmlField представляет тип поля, а не тип значения поля.Таким образом, HtmlField html будет присвоено null.Проверьте эту страницу MSDN для ссылки на все типы полей публикации и типы значений.
    Я не уверен, что тип значения поля HtmlField.Вероятно, просто string.
    Так что вы можете безопасно преобразовать его в строку:

    string html = Convert.ToString(item[CONTENT_FIELDtesthtml]);
    
  2. Я думаю, что хранение значения в свойстве - это путь.Таким образом достигается разделение уровня данных и уровня представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...