2012-01-09 5 views
4

私は、htmlフィールドの公開を処理するために、デフォルトのspmetalクラスを拡張する部分クラスを作成しました。ここで概説したように:HTMLフィールドを公開するためにlinqを共有ポイントに拡張する

Extending the Object-Relational Mapping

スニペットは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 
} 

"Webパーツ" からの抜粋:

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. なぜ0を行うには、返信nullですが、item.Fields.GetFieldByInternalNameは正しく動作しますか?
  2. webpart内のGetFieldValueAsTextメソッドを使用する方法がありますか、または後でアクセスするためのカスタム プロパティに値を格納するアプローチですか?

答えて

0
  1. あなたはタイプHtmlFielditem[CONTENT_FIELDtesthtml]のフィールド値をキャストしています。しかし、HtmlFieldはフィールドのタイプを表し、フィールド値のタイプは表しません。したがって、HtmlField htmlnullと割り当てられます。すべての発行フィールドタイプと値タイプの参照については、MSDN pageを参照してください。
    フィールド値のタイプがHtmlFieldのものがわかりません。おそらくちょうどstring
    だから、文字列に変換しても安全でなければなりません:

    string html = Convert.ToString(item[CONTENT_FIELDtesthtml]); 
    
  2. 私はプロパティに値を格納すると、移動するための方法だと思います。このようにして、データレイヤとプレゼンテーションレイヤの分離を実現します。

関連する問題