0

Sharepoint WebPart を作成し、正常に展開してページに追加しました。

Label、TextBox、およびボタンを備えている必要がありますが、そうではありません。ここでわかるように、それは「裸」です。

ここに画像の説明を入力

コントロールが表示されないのはなぜですか? かなり最小限のコードを次に示します。

namespace WebFormPDFGen.WebFormPDFGenWebPart
{
    //[ToolboxItemAttribute(false)]
    public class WebFormPDFGenWebPart : Microsoft.SharePoint.WebPartPages.WebPart
    {
        Label lbl = null;
        TextBox tb = null;
        Button btnSave = null;

        [Personalizable(PersonalizationScope.Shared)]
        public string Header { get; set; }

        protected override void CreateChildControls()
        {
            base.CreateChildControls();
            lbl = new Label();
            lbl.Text = "Look at this";
            this.Controls.Add(lbl);

            tb = new TextBox();
            this.Controls.Add(tb);

            btnSave = new Button();
            btnSave.Width = new Unit(50, UnitType.Pixel);
            btnSave.Text = "Click me if you dare";
            btnSave.Click += new EventHandler(btnSave_Click);
            this.Controls.Add(btnSave);
        }

        private void btnSave_Click(object sender, EventArgs e)
        {
            lbl.Text += lbl.Text + "now!";
        }

        protected override void OnLoad(EventArgs e)
        {
            base.OnLoad(e);

            EnsureChildControls();

            String user = SPContext.Current.Web.Users[0].ToString();
        }

        protected override void Render(HtmlTextWriter output)
        {
            output.Write(makeHTML());
        }

        protected string makeHTML()
        {
            string r = "<div class='finaff-announcements-panel'>";
            r += "<h2 class='finaff-white-panel-title'>" + Header + "</h2>";
            r += "<dl>";
            r += "</dl>";
            r += "</div>";
            return r;
        }

    }
}

?

アップデート

明示的に呼び出す必要があるのではないかと考えたので、コンストラクターに呼び出しを追加しました。

public WebFormPDFGenWebPart() 
{
    CreateChildControls();
    CssRegistration css = new CssRegistration();
    css.After = "corev4.css";
    css.Name = "/Style Library/dplat_style_webparts.css";
    this.Controls.Add(css);
}

...この WebPart の別のインスタンスを再構築、デプロイ、およびテスト ページに追加しましたが、残念ながら、Mudville ではまだ満足できません。

更新 2

さまざまな微調整によってコントロールが表示されるかどうかを確認するために、頭に浮かんだことを何でも試しています。WebPart の祖先の 3 つの異なるフレーバーを試しました。

using System;
using System.ComponentModel;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using Microsoft.SharePoint;
using Microsoft.SharePoint.WebControls;
using Microsoft.Office.Word.Server.Conversions;
using System.Collections.Generic;

namespace WebFormPDFGen.WebFormPDFGenWebPart
{
    //[ToolboxItemAttribute(false)]
    public class WebFormPDFGenWebPart : Microsoft.SharePoint.WebPartPages.WebPart
    //public class WebFormPDFGenWebPart : WebPart
    //public class WebFormPDFGenWebPart : System.Web.UI.WebControls.WebParts.WebPart

...そして、それらはすべて同じように機能するようです。したがって、単に「WebPart」を使用すると、「System.Web.UI.WebControls.WebParts.WebPart」に解決されると思います(IOW、2番目と3番目の実験は同じです)。とにかく、これらの 2 つの異なる先祖 (System.Web.UI.WebControls.WebParts.WebPart と Microsoft.SharePoint.WebPartPages.WebPart) の両方が機能しているように見えるのは、少し奇妙です...

更新 3

これも追加してみました:

protected override void RenderContents(HtmlTextWriter writer)
{
    writer.RenderBeginTag(HtmlTextWriterTag.Table);
    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    writer.Write("lbl Test: ");
    writer.RenderEndTag();
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    lbl.RenderControl(writer);
    writer.RenderEndTag();
    writer.RenderEndTag();

    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    writer.Write("TextBox: ");
    writer.RenderEndTag();
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    tb.RenderControl(writer);
    writer.RenderEndTag();
    writer.RenderEndTag();

    writer.RenderBeginTag(HtmlTextWriterTag.Tr);
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    writer.Write("save button: ");
    writer.RenderEndTag();
    writer.RenderBeginTag(HtmlTextWriterTag.Td);
    btnSave.RenderControl(writer);
    writer.RenderEndTag();
    writer.RenderEndTag();

    writer.RenderEndTag(); // table
}

...しかし、無駄です。牛が帰ってくるまで WebPart をページに追加できますが、追加したコントロールはまだ表示されません。

4

1 に答える 1