【问题标题】:SharePoint get value of rich text box control created programaticallySharePoint 获取以编程方式创建的richtextbox 控件的值
【发布时间】:2013-02-15 00:28:31
【问题描述】:

我正在编写一个需要使用几个富文本框控件的自定义 Web 部件。我以编程方式将控件放置到 Web 部件上。当 Web 部件获得保存回发时,我能够从除两个富文本框之外的所有字段中捕获数据。获取富文本框的值有什么诀窍?

我用来放置表单控件的代码是:

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

【问题讨论】:

  • 找到RTE控件时,formField变量是否为空?
  • sipwiz,如果你解决了问题,请告诉我如何。

标签: sharepoint-2010 web-parts


【解决方案1】:

字段名称可能有问题。尝试使用 InternalName。

item[field.InternalName] = formField.Value;

【讨论】:

    【解决方案2】:

    我一直在努力解决这个问题,并且正在使用我认为我会发布的解决方法,因为这非常令人沮丧。

    问题在于 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;
    }
    

    这可能需要扩展其他字段类型,但你明白了......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-15
      • 1970-01-01
      • 1970-01-01
      • 2015-12-12
      相关资源
      最近更新 更多