2010-12-15 15 views
0

リッチテキストボックスコントロールを使用するカスタムWebパーツを作成しています。私はプログラムでWebパーツにコントロールを配置しています。 Webパーツが保存ポストバックを取得すると、2つのリッチテキストボックス以外のすべてのフィールドからデータを取得できます。リッチテキストボックスの価値を引き出すための秘訣は何ですか?私のフォームコントロールを配置するために使用してSharePointはリッチテキストボックスコントロールの値をプログラムで作成します

コードI "mは次のとおりです。

private void CreateInputControls() 
    { 
     inputPanel.Controls.Clear(); 

     SPList list = SPContext.Current.Site.RootWeb.Lists["MyList"]; 
     SPContentType cType = list.ContentTypes[0]; 

     Table table = new Table(); 
     table.CellPadding = 3; 
     table.CellSpacing = 0; 

     SPContext newContext = SPContext.GetContext(System.Web.HttpContext.Current, list.DefaultView.ID, list.ID, list.ParentWeb); 

     foreach (SPField field in cType.Fields) 
     { 
      if (!field.Hidden && field.CanBeDisplayedInEditForm) 
      { 
       FieldLabel fieldLabel = new FieldLabel(); 
       fieldLabel.ControlMode = SPControlMode.New; 
       fieldLabel.ListId = list.ID; 
       fieldLabel.FieldName = field.InternalName; 
       fieldLabel.ItemContext = newContext; 
       fieldLabel.RenderContext = newContext; 
       fieldLabel.Field.Required = fieldLabel.Field.Required; 

       FormField formField = new FormField(); 
       formField.ControlMode = SPControlMode.New; 
       formField.ListId = list.ID; 
       formField.FieldName = field.InternalName; 
       formField.ItemContext = newContext; 
       formField.RenderContext = newContext; 
       formField.ID = field.InternalName; 
       formField.EnableViewState = true; 

       TableRow row = new TableRow(); 
       table.Rows.Add(row); 

       TableCell cellLabel = new TableCell(); 
       TableCell cellField = new TableCell(); 

       cellLabel.Controls.Add(fieldLabel); 
       cellField.Controls.Add(formField); 
       row.Cells.Add(cellLabel); 
       row.Cells.Add(cellField); 
      } 
     } 

     inputPanel.Controls.Add(table); 
    } 

私は新しいアイテムを保存するために使用しているコードは次のとおりです。

private void UpdateItem(string bannerImageURL, string thumbnailImageURL) 
    { 
     SPList list = SPContext.Current.Site.RootWeb.Lists["MyList"]; 
     SPContentType cType = list.ContentTypes[0]; 
     SPItem item = list.AddItem(); 

     foreach (SPField field in cType.Fields) 
     { 
      if (!field.Hidden && field.CanBeDisplayedInEditForm) 
      { 
       FormField formField = (FormField)inputPanel.FindControl(field.InternalName); 

       if (formField != null) 
       { 
        // Saves data for all fields EXCEPT for rich text box (sharepoint multiline columns). 
        item[field.Title] = formField.Value; 
       } 
      } 
     } 

     item.Update(); 
    } 
+0

...これは、他のフィールドタイプのための拡張が必要な​​場合がありますが、あなたのアイデアを得ますか否か? –

+0

sipwiz、あなたが問題を解決したら、どうか教えてください。 – Kai

答えて

0

多分に問題がありますフィールド名。InternalNameを使用してみてください。

item[field.InternalName] = formField.Value; 
0

を、私はこれで苦労してきたし、回避策を使用していましたこれはかなりイライラしていたので、私は投稿すると思った。

問題は、RTEコントロールが空になり、クライアント上のJavaScriptを使用した隠しコントロールから読み込まれてしまうことです。しかし、この非表示の制御は、このようにアクセス可能なサーバ側である:

switch (formField.Field.Type) 
{ 
    case SPFieldType.Note: 
     var rtf = (RichTextField)formField.Controls[0]; 
     item[field.Title] = rtf.HiddenInput.Value; 
     break; 
    default: 
     item[field.Title] = formField.Value; 
     break; 
} 

RTEコントロールが発見された場合、 `formField`変数nullである

関連する問題