SharePoint получает значение элемента управления rich text box, созданного программно - PullRequest
0 голосов
/ 16 декабря 2010

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

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

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

Ответы [ 2 ]

0 голосов
/ 14 февраля 2013

Я боролся с этим и использую обходной путь, который, как я думал, я опубликую, так как это довольно разочаровывает.

Проблема в том, что элемент управления 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;
}

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

0 голосов
/ 17 декабря 2010

Возможно, есть проблема с именем поля. Попробуйте использовать InternalName.

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