2010-12-15 6 views
0

Я пишу пользовательскую веб-часть, которая должна использовать несколько богатых элементов управления текстовыми полями. Я помечаю элементы управления на веб-часть программно. Когда веб-часть получает сообщение об обратной сохранении, я могу захватить данные из всех полей, кроме двух богатых текстовых полей. Какая уловка, чтобы получить ценность богатого текстового поля?SharePoint получить значение богатого текстового поля управления, созданного программно

код я "м, используя для размещения своих элементов управления формы является:

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

Может быть, есть проблема с поле имени. Попробуйте использовать 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; 
} 

Это может потребоваться расширение для других типов полей, но вы получите идею ...

Смежные вопросы