2010-12-15 16 views
0

我正在編寫需要使用一些富文本框控件的自定義Web部件。我將這些控件以編程方式放置在Web部件上。當web部分獲得保存回傳時,我可以從除了兩個富文本框之外的所有字段捕獲數據。能夠獲得富文本框的價值的訣竅是什麼?SharePoint獲取富文本框控件創建的編程方式的價值

的代碼我「用把我的表單控件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

當RTE控制被發現,是'formField'變空或不? – 2010-12-17 12:08:35

+0

sipwiz,如果你解決了問題,請告訴我如何。 – Kai 2011-07-25 15:28:00

回答

0

也許有同一個問題嘗試使用內部名稱

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; 
} 

這可能需要其他字段類型擴展,但你的想法...

相關問題